Android:无法通过编程更新我的联系人
问题描述:
我已经编写了简单更新的代码。我能够从我的AVD的联系人中插入和删除数据,但是当我想更新数据时,它没有更新。Android:无法通过编程更新我的联系人
这里是我的示例代码:
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)
任何一个可以帮助?我被困在这里。
答
要开始,你.withSelection(Data.CONTACT_ID + "=?", new String[]{rawContactInsertIndex}
是要在所有数据列,其中Data.CONTACT_ID
列具有价值0
进行更新。这包括电话号码,地址等。
幸运的是,没有这样的接触显然,因为你会f-ck联系了王室。
首先,您应该获取正确的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
。
+0
谢谢你jens as iam新增至stackoverflow – shvivek 2011-12-30 10:39:40
是否在您的manifest.xml中为WRITE_CONTACTS添加了权限\t允许应用程序写入(但不读取)用户的联系人数据。 – 2011-12-30 10:24:46
亚我已添加 – shvivek 2011-12-30 10:27:19