존재하지 않는 필드로 기존 연락처를 업데이트하려고하면 문제가 있습니다. 예 : 이름 및 전자 메일 주소 필드가 포함 된 새 연락처를 만들었습니다. 액션을 생성하는 동안 비어 있지 않은 필드에 대해서만 ContentProviderOperation.newInsert (ContactsContract.Data.CONTENT_URI)를 사용합니다. 연락처를 작성하는 동안 전화 필드를 삽입새 필드로 연락처를 업데이트 할 수 없습니다.
이코드 (잘 작동)에서
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());
}
:
그래서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());
}
}
가, 지금은 업데이트 프로세스를 실행하고 내 연락처에 전화 번호를 추가하려고 연락처 작성 중에 전화 필드가 삽입 된 경우 업데이트가 제대로 작동합니다. 휴대 전화가 삽입되지 않은 경우 업데이트는 아무 작업도 수행하지 않습니다. 필드는 업데이트되지 않습니다. LogCat의 경고도 오류도 없습니다.
연락처 작성시 빈 필드를 작성하고 싶지 않은 이유는 빈 필드로 인해 com.android.contacts.list.ContactListItemView에서 널 포인터 예외로 연락처 탭으로 전환 할 때 삼성 Nexus 장치에서 전화 애플리케이션이 충돌합니다. .onMeasure (ContactListItemView.java:350).
그래서, 내 질문은 : 은 업데이트 과정에서 존재하지 않을 경우 새 필드를 삽입하는 (그리고 그것을 어떻게 감지) 또는 존재하는 경우 필드를 삭제하고 새로운 갱신 값이 비어 있습니까? 필드가 비어있는 경우 Nexus 휴대 전화 앱의 충돌을 피할 수있는 또 다른 해결책이 있습니까?
P. , 경우 경우 새 값이 빈; 발견되지 않는 경우는, 경우에 생성 - (이 잘 업데이트 작업을 수행합니다
이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)