我正在开发一个需要更新许多联系人的应用程序,我收到以下错误。
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);
}
我看过过去的问题,但它们大多与插入有关,而不是更新。
我想一次更新这么多记录的原因是因为我的应用程序是一个“联系人号码格式化程序”,它允许用户轻松标准化手机中的所有电话号码。我无法控制用户想要在一个批次中更新多少记录。(https://play.google.com/store/apps/details?id=angel.phoneformat)