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) 

任何一个可以帮助?我被困在这里。

+0

是否在您的manifest.xml中为WRITE_CONTACTS添加了权限\t允许应用程序写入(但不读取)用户的联系人数据。 – 2011-12-30 10:24:46

+0

亚我已添加 – shvivek 2011-12-30 10:27:19

要开始,你.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新增至* – shvivek 2011-12-30 10:39:40