【发布时间】:2017-07-06 19:37:06
【问题描述】:
我首先提出这样的要求:
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[]{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
Cursor cursor = resolver.query(uri, projection, null, null, null);
ArrayList<Contact> contactList = new ArrayList<> ();
if (cursor != null && cursor.moveToFirst ()) {
do {
Contact contact = new Contact();
contact.Id = cursor.getLong (cursor.getColumnIndex (projection [0]));
contact.DisplayName = cursor.getString (cursor.getColumnIndex (projection [1]));
contact.PhotoId = cursor.getString (cursor.getColumnIndex (projection [2]));
contact.PhoneNumber = cursor.getString (cursor.getColumnIndex (projection [4]));
contactList.add (contact);
} while (cursor.moveToNext());
cursor.close();
}
return contactList;
然后我使用第一个请求返回的 ID 来更新联系人,如下所示:
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
// Name
ops.add(ContentProviderOperation
.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(
ContactsContract.Contacts._ID
+ "=? AND "
+ ContactsContract.Data.MIMETYPE
+ "=?",
new String[] {
String.valueOf(contact.Id),
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE })
.withValue(ContactsContract.Contacts.DISPLAY_NAME, contact.DisplayName)
.build());
try {
resolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
但不幸的是,更新部分不起作用。 知道如何将第一个请求的结果与更新请求一起使用吗?
【问题讨论】: