Android联系人数据字段可以编辑,但不能创建



我使用这段代码来更新联系人的地址,但它只适用于已有地址的联系人。如果联系人地址字段为空,则update()方法返回零,并且不更新联系人数据。如何向现有联系人添加地址?

//str_id is the contact's ID
//input is the String representing an address
ContentValues cv = new ContentValues();
String[] params = new String[] { str_id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE };
cv.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input);
getContentResolver().update(ContactsContract.Data.CONTENT_URI, cv, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?", params);

我也尝试了等效的逻辑与ContentProviderOperation,但得到相同的结果。就像我前面的例子一样,我可以更新一个现有的地址,但不能创建一个地址。

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, id)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input)
    .build());

在更新Address之前需要检查Address是否存在,如果地址存在,你的上述代码将工作良好,因为你正在做的只是更新..

在做插入地址时,实际上你正在做一个子插入"看到这里, ContentProviderOperation的很好的解释,这与你的问题密切相关..

相关内容

最新更新