我想向联系人添加自定义字段,告诉我该联系人是否已在我的应用程序中标记。 首先,我想创建一个函数,将我的自定义数据设置为与给定的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;”时插入我的应用程序崩溃了 我搜索过类似的解决方案,但没有任何对我有用:/
答案 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");
}
}