有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 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());

共 (1) 个答案

  1. # 1 楼答案

    在更新地址之前,你需要检查地址是否存在, 如果地址存在,您的上述代码将正常工作,因为您正在进行更新

    在执行insert address时,实际上您正在执行a child insert" see here,非常好地解释了与您的问题密切相关的ContentProviderOperation