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.
- SyncAdapter sin un ContentProvider
- Android - Consultando el ContentProvider de SMS?
- Crear y compartir un archivo desde el almacenamiento interno
- ¿Dónde está la clase SampleZipfileProvider?
- Obtener cursor mediante la biblioteca Realm
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.
- ¿Necesito un proveedor de contenido con un cargador de cursor?
- ¿Qué es un reemplazo de MODE_WORLD_READABLE SharedPreferences obsoleto en Android?
- Límite de búsqueda Android SearchRecentSuggestionsProvider
- Android - Observer DB cambia con GreenDao ORM
- Agrupar por en ContentResolver en Ice Cream Sandwich
- Android - Seleccionar máximo en contentProvider
- Buscar sugerencias de diferentes tablas en diferentes actividades
- La concesión de permisos uri para FileProvider da SecurityException
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.
- Recuperar la ruta absoluta cuando seleccione la imagen de la galería kitkat android
- Permiso de Android 6.0.GET_ACCOUNTS