Android:无法通过编程更新我的联系人

时间:2011-12-30 10:05:34

标签: android android-contacts

我已经编写了简单更新的代码。我可以插入和删除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)

任何人都可以帮忙吗?我被困在这里。

1 个答案:

答案 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