많은 연락처를 업데이트해야하는 앱을 개발 중이며 다음 오류가 발생합니다.500 개 이상의 연락처 일괄 업데이트
android.content.OperationApplicationException : 항복점 간 콘텐츠 공급자 작업이 너무 많습니다. 항복점 당 최대 작업 수는 500입니다.
연락처를 업데이트하여 작은 덩어리로 나누어서 업데이트하려고했지만 동일한 오류가 발생했습니다. 좋은 점은 이제 일부 연락처가 업데이트된다는 것입니다 (이전에는 0 개의 연락처가 업데이트되었습니다). 나를 도울 수있는 제안은 크게 감사드립니다.
Uri uri = ContactsContract.Data.CONTENT_URI;
String selectionUpdate = ContactsContract.CommonDataKinds.Phone._ID + " = ? AND " + ContactsContract.Contacts.Data.MIMETYPE + " = ? ";
int i = 0;
int numRowsUpdated = 0;
int batchsize = 100;
for (EntityPhone ep : eps) {
if (ep.isUpdateNumber()) {
//update only when checkbox is ticked
ops.add(ContentProviderOperation.newUpdate(uri)
.withSelection(selectionUpdate, new String[]{ep.getPhoneId(), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE})
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, ep.getPhoneNumberNew())
.build());
i++;
if (i % batchsize == 0) {
i = 0;
ContentProviderResult[] count = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
if (count != null) {
numRowsUpdated += count.length;
Log.i(TAG, "batch update success" + count.length);
} else {
Log.w(TAG, "batch update failed");
}
}
}
}
if (i != 0) {
ContentProviderResult[] count = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
}
나는 지난 질문을 살펴 봤지만 대부분 삽입과 관련이 있으며 업데이트는 아닙니다.
- Insertion of thousands of contact entries using applyBatch is slow
- Whats the fastest way to create large numbers of contacts?
한번입니다에 내 응용 프로그램은 사용자가 모든 전화 번호를 표준화 할 수있는 '접촉 수치 포매터가'이기 때문에 많은 레코드를 업데이트 할 이유 전화로 쉽게. 사용자가 한 번에 업데이트 할 레코드 수를 제어 할 수 없습니다. (https://play.google.com/store/apps/details?id=angel.phoneformat)
에 500 변경에 도달하면 결국 당신이 있어야하지 않나요 실패 안에 작전을 클리어하면 (i 서 %의 BATCHSIZE == 0)? – Heinrisch