我嘗試更新現有聯繫人字段時不存在問題。 例如: 我成功創建了包含姓名和電子郵件地址字段的新聯繫人。在創建操作期間,我只對非空字段使用ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)。無法更新新字段的聯繫人
代碼爲聯繫人創建過程中插入手機領域(正常工作):
if (isNewContact){
if (!phone.equals("")){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, id)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, type)
.build());
}
}
所以,現在我嘗試運行更新過程,並追加到我的聯繫人的電話號碼:
if (isUpdateContact){
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(ContactsContract.Data.RAW_CONTACT_ID + "=? AND "
+ ContactsContract.CommonDataKinds.Phone.TYPE
+ "=? AND " + ContactsContract.Data.MIMETYPE
+ "=?",
new String[] {"" + id, "" + type,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE })
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, type)
.build());
}
在如果在聯繫人創建過程中插入手機字段,則更新可以正常工作。如果手機沒有插入,那麼更新什麼都不做 - 該字段不會被更新。在LogCat中沒有警告既沒有錯誤。
我不想在聯繫人創建時創建空字段的原因是因爲空字段崩潰在三星Nexus設備中切換到聯繫人選項卡時出現空字段崩潰在com.android.contacts.list.ContactListItemView中使用空指針異常.onMeasure(ContactListItemView.java:350)。
所以,我的問題是: 如何在更新過程中插入一個新的領域,如果不存在(以及如何檢測它),或者如果存在刪除字段,但新的更新值是空的?有沒有可能,或者有另一種解決方案來避免Nexus手機應用程序崩潰,如果字段爲空?
P.S.試圖對已經創建的聯繫人期間運行newInsert,越來越:
mType: 1, mUri: content://com.android.contacts/data, mSelection: null, mExpectedCount: null, mYieldAllowed: false, mValues: data1= mimetype=vnd.android.cursor.item/phone_v2 data2=1, mValuesBackReferences: raw_contact_id=2962, mSelectionArgsBackReferences: null
java.lang.ArrayIndexOutOfBoundsException: asked for back ref 2962 but there are only 1 back refs
at android.content.ContentProviderOperation.backRefToValue(ContentProviderOperation.java:362)