Master-detail Uso de ContentResolver.applyBatch ()?

Me preguntaba si es posible guardar registros maestros y de detalle a un proveedor de contenido utilizando el método android.content.ContentResolver.applyBatch () en la misma operación en la que los elementos de ContentProviderOperation posteriores del parámetro proveedores dependen del resultado de los elementos anteriores.

El problema que estoy teniendo es que el Uri actual no se conoce en el momento que el método ContentProviderOperation.newInsert (Uri) se llama y el Uri es inmutable.

Lo que he venido con se muestra a continuación:

Master Uri: contenido: //com.foobar.masterdetail/master
Detalle Uri: contenido: //com.foobar.masterdetail/master/#/detail

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); operations.add(ContentProviderOperation.newInsert(intent.getData()) .withValue(Master.NAME, "") .withValue(Master.VALUE, "") .build()); operations.add(ContentProviderOperation.newInsert(intent.getData() .buildUpon() .appendPath("#") /* ACTUAL VALUE NOT KNOWN UNTIL MASTER ROW IS SAVED */ .appendPath("detail") .build()) .withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */) .withValue(Detail.NAME, "") .withValue(Detail.VALUE, "") .build()); ContentProviderResult[] results = this.getContentResolver().applyBatch(MasterDetail.AUTHORITY, operations); for (ContentProviderResult result : results) { Uri test = result.uri; } 

En mi proveedor de contenido, estoy anulando el método applyBatch () para envolver la operación en una transacción.

¿Es esto posible o hay una mejor manera de hacer esto?

Gracias.

Cada resultado producido a partir de un elemento en la matriz de operaciones se identifica por su índice en la matriz. Las operaciones subsiguientes pueden hacer referencia a esos resultados mediante el método withValueBackReference ().

 .withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */) 

Se convierte

 .withValueBackReference(Detail.MASTER_ID, 0) 

Un ejemplo completo de este uso se puede encontrar en la muestra ContactManager . El 0 es el índice de la ContentProviderOperation desde el cual se obtiene el valor.

  • Insertar varias filas con ContentProvider
  • ¿Cómo especifica la aplicación del proveedor de contenido los permisos que necesitan las aplicaciones de los clientes para acceder a los datos del proveedor?
  • ¿Puedo extender la base de datos de contactos de Androids?
  • Cómo seleccionar contactos exclusivos de android
  • Cómo probar proveedores de contenido en Android
  • ¿Las aplicaciones que no van a compartir necesitan el proveedor de contenido?
  • Android y un servicio RESTful
  • Android Obtener el grupo de contactos por ID
  • Prueba de unidades de Android con ContentProviders
  • Cómo manejar llamadas REST, persistencia de datos, sincronización y observación de ContentProvider
  • Android RecyclerView + CursorLoader + ContentProvider + "Cargar más"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.