0

我使用此代碼更新聯繫人的地址,但它僅適用於具有現有地址的聯繫人。如果聯繫地址字段爲空,則update()方法返回零,聯繫人數據不會更新。如何將地址添加到現有聯繫人?Android聯繫人數據字段可以編輯但不能創建

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

回答

0

你需要檢查ADRESS是否存在不更新地址,前 如果地址存在於您上面的代碼將正常工作,你正在做的只是更新..

雖然做插入的地址,其實你是做a child insert" see here,非常好的解釋ContentProviderOperation這與你的問題密切相關..