我正在開發一個需要更新許多聯繫人的應用程序,並且出現以下錯誤。批量更新超過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)
你不應該最終失敗了清除裏面的OPS如果(I%BATCHSIZE == 0)? – Heinrisch 2013-03-25 15:48:16