Sto sviluppando un'applicazione che ha bisogno di aggiornare molti contatti e sto ricevendo il seguente errore.Aggiornamento collettivo di oltre 500 contatti
android.content.OperationApplicationException: Troppe operazioni del provider di contenuti tra i punti di rendimento. Il numero massimo di operazioni per punto di snervamento è 500
Ho provato a rompere i contatti in blocchi più piccoli per l'aggiornamento, ma ottengo ancora lo stesso errore. La cosa buona è che ora alcuni contatti vengono aggiornati (in precedenza sono stati aggiornati 0 contatti). Qualsiasi suggerimento che possa aiutarmi è molto apprezzato.
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);
}
Ho esaminato le domande precedenti, ma sono principalmente correlate a inserimenti, non aggiornamenti.
- Insertion of thousands of contact entries using applyBatch is slow
- Whats the fastest way to create large numbers of contacts?
La ragione per cui voglio aggiornare i tanti record in una volta è perché la mia domanda è un 'contatto serie formattatore' che permette all'utente di standardizza tutti i numeri telefonici nel telefono facilmente. Non ho il controllo del numero di record che gli utenti desiderano aggiornare in un singolo batch. (https://play.google.com/store/apps/details?id=angel.phoneformat)
Non dovresti essere compensazione ops all'interno del if (i% batchsize == 0)? – Heinrisch