【问题标题】:Contact Custom Fields联系自定义字段
【发布时间】:2010-06-09 20:50:39
【问题描述】:

好的,我对 Android SDK 有点陌生,如果我的问题没有意义或非常琐碎,请原谅我。我想为联系人添加一个自定义字段,其中包含我正在为其做这个应用程序的网站上的联系人用户名。而且,使用这个自定义字段,我希望能够单击它(例如“发送消息”或“呼叫移动设备”),以便我可以转到我的应用程序中的特定活动,并使用用户名设置 TextView我刚刚点击的。

抱歉,如果这有点令人困惑,如果您需要其他任何内容,请告诉我!

【问题讨论】:

标签: android


【解决方案1】:

它正在工作!但是我在这里将 Data.CONTACT_ID 更改为 Data.RAW_CONTACT_ID :

if (mod == 0) {
    values.put(Data.CONTACT_ID, this.getId());
    values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE);
    ctx.getContentResolver().insert(Data.CONTENT_URI, values);
}

【讨论】:

  • 还有这里:int mod = ctx.getContentResolver().update( Data.CONTENT_URI, values, Data.CONTACT_ID + "=" + this.getId() + " AND " + Data.MIMETYPE + "= '" + clsContacts.FORMALITY_MIMETYPE + "'", null);
【解决方案2】:

您必须为这些创建自己的 mime 类型。

这是一个将布尔值作为我的自定义 mime 类型保存到联系人的示例。它使用最新的 SDK 2.1

public static final String MIMETYPE_FORMALITY = "vnd.android.cursor.item/useformality";
public clsMyClass saveFormality() {
        try {
            ContentValues values = new ContentValues();
            values.put(Data.DATA1, this.getFormality() ? "1" : "0");
            int mod = ctx.getContentResolver().update(
                    Data.CONTENT_URI,
                    values,
                    Data.CONTACT_ID + "=" + this.getId() + " AND "
                            + Data.MIMETYPE + "= '"
                            + clsContacts.FORMALITY_MIMETYPE + "'", null);

            if (mod == 0) {
                values.put(Data.CONTACT_ID, this.getId());
                values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE);
                ctx.getContentResolver().insert(Data.CONTENT_URI, values);
            }
        } catch (Exception e) {
            Log.v(TAG(), "saveFormality failed");
        }
     return this;
    }

public boolean getFormality() {
     if (data.containsKey(FORMALITY)) {
        return data.getAsBoolean(FORMALITY);
    } else {
        // read formality
        Cursor c = readDataWithMimeType(clsContacts.MIMETYPE_FORMALITY, this.getId());
        if (c != null) {
            try {
                if (c.moveToFirst()) {
                    this.setFormality(c.getInt(0) == 1);
                    return (c.getInt(0) == 1);
                }
            } finally {
                c.close();
            }
        }
        return false;
    }

}
public clsMyClass setFormality(Boolean value) {
    data.remove(FORMALITY);
    data.put(FORMALITY, value);
    return this;
}

/**
 * Utility method to read data with mime type
 *
 * @param mimetype String representation of the mimetype used for this type
 *            of data
 * @param contactid String representation of the contact id
 * @return
 */
private Cursor readDataWithMimeType(String mimetype, String contactid) {
    return ctx.getContentResolver().query(
            Data.CONTENT_URI,
            new String[] {
                Data.DATA1
            },
            Data.RAW_CONTACT_ID + "=" + contactid + " AND " + Data.MIMETYPE + "= '" + mimetype
                    + "'", null, null);
}

用法是

objContact.setFormality(true).saveFormality();

【讨论】:

  • “if (data.containsKey(FORMALITY))”中的数据是什么
【解决方案3】:

要添加自定义字段,您需要在 MIMETYPE 表中添加自定义 mimetype。但是我们不能直接访问 MIMETYPE 表。所以可以做到以下几点:

public static final String MIMETYPE="vnd.android.cursor.item/favsong";

         ContentValues values = new ContentValues();
    values.put(Data.RAW_CONTACT_ID, id);
    values.put(Data.MIMETYPE, MIMETYPE);
    values.put(Data.DATA1, "MyFavSong");
    Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

我们所做的是,我们创建了一个自定义 MIMETYPE 作为字符串常量。 然后使用插入查询,我们在数据表中插入一个新行,其中包含我们想要关联自定义字段的人的 RAW_CONTACT_ID,在 MIMETYPE 列中我们放置自己的 mimetype,在 DATA1 列中放置最喜欢的歌曲。这里系统内部在 MIMETYPE 表中添加新的 mimetype 并给它一个 ID,该 ID 用于 Data 表的 mimetype_id 列。

【讨论】:

  • 您确定此代码添加了新字段吗?我尝试了此代码,但它用 MyFavSong 替换了我的联系人姓名。为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多