Android 앱에 대한 단위 테스트를 진행 중이며 주소록을 많이 사용하고 있습니다. Android Content Providers에 연락처를 삽입하고 테스트를 실행 한 후 삭제해야합니다. 문제는 실제로 삭제되지 않습니다이다 :Android 2.x에서 연락처 삭제 (기본)
삽입 :
ArrayList<ContentProviderOperation> contactOps = new ArrayList<ContentProviderOperation>();
int backRefIndex = 0;
Random r = new Random();
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Sample Name" + r.nextInt())
.build());
contactOps.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex)
.withValue(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "020" + r.nextInt())
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, r.nextInt(20)
.build());
try {
ContentProviderResult[] result = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, contactOps);
} catch (Exception e) {
e.printStackTrace();
}
삭제 방법 1 (원시 접촉의 수를 반환하지만, 실제로는 삭제되지 않음) :
int deletedRawContacts = context.getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.RawContacts._ID + " >= ?", new String[]{"0"});
삭제 방법 2 (삭제 방법 1과 동일하지만 다른 방법) :
연락처 삭제 방법은 작동하지만 원시 연락처 삭제 방법은 잘못된 값을 반환합니다. 모든 대화 상대를 삭제했다는 것을 알려주지 만 다음 테스트 사례를 실행하면 이전의 원시 주소록을 계속 찾을 수 있습니다 (예 : 삽입 된 주소록과 현재 주소록이 잘못됨). 참고 : 모든 테스트는 Android 에뮬레이터에서 수행됩니다.
어떻게 해결할 수 있습니까?
나는 비슷한 질문을 여기에서 보았습니다 : How to delete a contact? - 그러나 해결책은 주어진 문제를 해결하지 못합니다.
L0rdAli3n 코딩
이 도움이 희망과 행복, 당신은 단지 위기의 남자 : –
을 돕는 좋은 업보를 취득 나는 나는이 대답을 표시하는 것을 잊었다 :) –
난 그냥 실현 도울 수 기뻐요 올바른 것 - 크리스토프 하프너 (Christophe Haefner)보다 늦은 것이 더 낫습니다. – benfwirtz