我想通过联系人ID更新Android联系人。
所以,我有: Herre我提供联系人 id = ContactsContract.RawContacts._ID 和字符串电话号码
private void updateContact(String id, String phone) {
ContentResolver cr = getContentResolver();
String where = ContactsContract.Data._ID + " = ? AND " +
ContactsContract.Data.MIMETYPE + " = ? AND " +
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE)
+ " = ? ";
String[] params = new String[] {id,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone
.TYPE_HOME)};
// Cursor phoneCur = managedQuery(ContactsContract.Data.CONTENT_URI, null, where, params, null);
Cursor phoneCur= getContentResolver().
query(ContactsContract.Data.CONTENT_URI,
null, where, params, null);
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
if ( (null == phoneCur) ) {
createContact(id, phone);
} else {
ops.add(ContentProviderOperation.newUpdate
(ContactsContract.Data.CONTENT_URI)
.withSelection(where, params)
.withValue(ContactsContract.CommonDataKinds.Email.DATA,
"somebody@android.com")
.build());
}
phoneCur.close();
try {
cr.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是联系人没有更新......这段代码有什么问题?
答案 0 :(得分:0)
很抱歉,但您的代码看起来非常混乱,我发现有几个错误(例如,您phoneCur
正在检查null
,但phoneCur.getCount() == 0
则没有。
另外,为什么您的代码试图用电子邮件地址替换电话号码?
无论如何,你的where
条款是错误的。如果要按RawContact的ID进行过滤,则不应使用ContactsContract.Data._ID
,这是数据项的行ID。
要搜索特定的RAW_CONTACT_ID
,where
子句应如下所示:
String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " +
ContactsContract.Data.MIMETYPE + " = ? AND " +
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE) + " = ? ";
可以像这样创建用于插入新电子邮件地址的ContentProviderOperation
:
ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValue(ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID, id)
.withValue(ContactsContract.CommonDataKinds.Email.MIMETYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.ADDRESS,
"somebody@android.com")
.build());