Batch Eliminar elementos con el proveedor de contenido en Android

Estoy tratando de batch eliminar algunos elementos en una tabla.

String ids = { "1", "2", "3" }; mContentResolver.delete(uri, MyTables._ID + "=?", ids); 

Sin embargo sigo recibiendo este siguiente error

Java.lang.IllegalArgumentException: Demasiados argumentos de enlace. 3 argumentos fueron proporcionados, pero la declaración necesita 1 argumentos.

El error se produce porque tiene un marcador de posición único (?) En su cláusula where, mientras pasa tres argumentos. Deberías hacer:

 String ids = { "1", "2", "3" }; mContentResolver.delete(uri, MyTables._ID + "=? OR " + MyTables._ID + "=? OR " + MyTables._ID + "=?", ids); 

No sé si SQLite apoya la cláusula IN, si es así también podría hacer:

 String ids = { "1, 2, 3" }; mContentResolver.delete(uri, MyTables._ID + " IN (?)", ids); 

Puede utilizar ContentProviderOperation para la eliminación / inserción / actualización de lotes en una transacción. Es mucho mejor que no tenga que concatenar cadenas. También debe ser muy eficiente. Para suprimir:

  ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); ContentProviderOperation operation; for (Item item : items) { operation = ContentProviderOperation .newDelete(ItemsColumns.CONTENT_URI) .withSelection(ItemsColumns.UID + " = ?", new String[]{item.getUid()}) .build(); operations.add(operation); } try { contentResolver.applyBatch(Contract.AUTHORITY, operations); } catch (RemoteException e) { } catch (OperationApplicationException e) { } 
  • Android Gallery en Android 4.4 (KitKat) devuelve un URI diferente para Intent.ACTION_GET_CONTENT
  • Getcontentresolver () no está definido para el tipo
  • Android: encuentra un contacto por nombre de visualización
  • Getcontentresolver () devuelve null en un servicio
  • Android recibe sms de la bandeja de entrada, forma optimizada para leer todos los mensajes y agruparlos
  • ¿Cómo acceder a sms tiempo que he recibido en la bandeja de entrada?
  • La inserción de miles de entradas de contacto mediante applyBatch es lenta
  • Telephony.Sms.Inbox.PERSON utiliza Contacts.People._ID obsoletos
  • ¿Por qué esta variable se establece en cadena vacía cuando ya se inicializa a una cadena vacía?
  • ¿El método notifyChange de ContentResolver notifica también el detalle de Uri?
  • Android: transacciones SQLite al usar ContentResolver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.