我已经编写了简单更新的代码。我可以插入和删除AVD联系人的数据,但是当我想更新数据时,它不会更新。
这是我的示例代码:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
String rawContactInsertIndex = (Integer.toString(ops.size()));
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection( Data.CONTACT_ID + "=?" , new String[] { rawContactInsertIndex })
.withValue(StructuredName.DISPLAY_NAME, firstname)
.withValue(StructuredName.FAMILY_NAME, lastname)
.withValue(StructuredName.GIVEN_NAME, firstname)
任何人都可以帮忙吗?我被困在这里。
答案 0 :(得分:1)
首先,您的.withSelection(Data.CONTACT_ID + "=?", new String[]{rawContactInsertIndex}
将对所有数据列执行更新,其中Data.CONTACT_ID
列的值为0
。这包括电话号码,地址等等。
幸运的是,显然没有这样的联系,因为你可以联系皇家。
首先,您应该抓取正确的CONTACT_ID
并对您的选择做一些工作,即在Data.MIME_TYPE
上进行选择。
contactId = Fetch the correct row identifier of the contact you want to update.
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.CONTACT_ID + "=? AND " + Data.MIME_TYPE + "=?",
new String[]{contactId, StructuredName.CONTENT_ITEM_TYPE})
.withValue(StructuredName.DISPLAY_NAME, firstName)
.withValue(StructuredName.FAMILY_NAME, lastName)
.withValue(StructuredName.GIVEN_NAME, givenName).build());
另外,您确定要更新CONTACT_ID
吗?考虑使用RAW_CONTACT_ID
。