Tôi đang phát triển một ứng dụng cần cập nhật nhiều địa chỉ liên hệ và tôi gặp phải lỗi sau.Cập nhật hàng loạt của hơn 500 địa chỉ liên hệ
android.content.OperationApplicationException: Quá nhiều hoạt động của nhà cung cấp nội dung giữa các điểm sản lượng. Số hoạt động tối đa trên mỗi điểm sản lượng là 500
Tôi đã cố gắng chia các liên hệ thành các phần nhỏ hơn để cập nhật, nhưng tôi vẫn gặp lỗi tương tự. Điều tốt là bây giờ, một số địa chỉ liên lạc được cập nhật (trước đây 0 địa chỉ liên lạc được cập nhật). Bất kỳ gợi ý nào có thể giúp tôi được đánh giá cao.
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);
}
Tôi đã xem xét các câu hỏi trong quá khứ, nhưng chúng chủ yếu liên quan đến chèn, không cập nhật.
- Insertion of thousands of contact entries using applyBatch is slow
- Whats the fastest way to create large numbers of contacts?
Lý do tại sao tôi muốn cập nhật rất nhiều hồ sơ cùng một lúc là vì ứng dụng của tôi là một 'liên lạc số định dạng' cho phép người sử dụng để chuẩn hóa tất cả các số điện thoại trong điện thoại dễ dàng. Tôi không có quyền kiểm soát số lượng bản ghi mà người dùng muốn cập nhật trong một đợt. (https://play.google.com/store/apps/details?id=angel.phoneformat)
Bạn có nên xóa thanh toán bên trong if (i% batchsize == 0) không? – Heinrisch