向Android中的联系人添加自定义数据

时间:2012-01-29 13:00:58

标签: android sqlite contacts

我想向联系人添加自定义字段,告诉我该联系人是否已在我的应用程序中标记。 首先,我想创建一个函数,将我的自定义数据设置为与给定的id联系,但我尝试使用的代码无法正常工作。

 public static final String             MIMETYPE_EMPLOYEE   = "vnd.android.cursor.item/employee";
public void addEmployee(String id){
            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            Uri newContactUri = null;
             ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                      .withSelection(ContactsContract.Data._ID + "=?", new String[]{id})
                      .withValue(ContactsContract.Data.MIMETYPE, MIMETYPE_EMPLOYEE)
                      .withValue(ContactsContract.Data.DATA1, "yes") 
                      .build());

            try{
                ContentProviderResult[] res = act.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

                if (res!=null && res[0]!=null) {

                    newContactUri = res[0].uri; 
                    Log.d(LOG_TAG, "URI added contact:"+ newContactUri); //here it says that it's null :(
                }
                else Log.e(LOG_TAG, "Contact not added.");
            }   catch (RemoteException e) { 
                // error
                Log.e(LOG_TAG, "Error (1) adding contact.");
                newContactUri = null;
            }   catch (OperationApplicationException e) {
                // error
                Log.e(LOG_TAG, "Error (2) adding contact.");
                newContactUri = null;
            }  
            Log.d(LOG_TAG, "Contact added to system contacts.");

            if (newContactUri == null) {
                Log.e(LOG_TAG, "Error creating contact");
            }
        }

我还尝试使用Insert而不是更新但是当我尝试检索“newContactUri = res [0] .uri;”时插入我的应用程序崩溃了 我搜索过类似的解决方案,但没有任何对我有用:/

1 个答案:

答案 0 :(得分:1)

来自MAYUR BHOLA的主题帮助,thx。 我正在发布我的问题的工作版本,也许有人需要这个。

public static final String             MIMETYPE_EMPLOYEE   = "vnd.android.cursor.item/employee";
    private void updateEmployee(String id, String value){
    try {
        ContentValues values = new ContentValues();
        values.put(Data.DATA1, value);
        int mod = act.getContentResolver().update(
                Data.CONTENT_URI,
                values,
                Data.RAW_CONTACT_ID + "=" + id + " AND "
                        + Data.MIMETYPE + "= '"
                        + MIMETYPE_EMPLOYEE + "'", null);

        if (mod == 0) {
            values.put(Data.RAW_CONTACT_ID, id);
            values.put(Data.MIMETYPE, MIMETYPE_EMPLOYEE);
            act.getContentResolver().insert(Data.CONTENT_URI, values);
            Log.v(LOG_TAG, "data inserted");
        } else {
            Log.v(LOG_TAG, "data updated");
        }
    } catch (Exception e) {
        Log.v(LOG_TAG, "failed");
    }
}