Android – CursorLoader y SQLite sin proveedor de contenido

Sé que esto se ha discutido todavía quisiera preguntar sobre el estado actual de la materia. ¿Tengo que crear un ContentProvider para utilizar CursorLoader en conexión con una base de datos sqlite?

encontré

Uso de CursorLoader sin ContentProvider

Parece exactamente lo que yo esperaba todavía como Emmby comentó

  • Los usuarios deben ser conscientes de una limitación, que es que no tiene ningún mecanismo para actualizar los cambios de datos (como se supone que los cargadores de hacer)

Así que se menciona otra solución

Https://github.com/commonsguy/cwac-loaderex

Nuevamente se señala algún inconveniente

  • Sin embargo, para hacer uso de la re-interrogación automática, es necesario utilizar el mismo cargador para la interfaz de usuario, así como para las actualizaciones, lo que limita su usabilidad para los servicios de fondo.

Por supuesto, al usar LoaderManager queremos obtener todos los beneficios para los que fue introducido. Así que mi pregunta es si hay una manera de usar LoaderManager en relación con una base de datos sqlite sin tener que implementar un proveedor de contenido sin embargo, tienen todos los beneficios de la misma.

Gracias

Las dos implementaciones que menciona en su publicación ofrecen todas las ventajas del CursorLoader excepto la capacidad de recibir notificaciones cuando cambia el contenido subyacente.

He estado buscando en esto mucho recientemente y puedo decirle con confianza que la API de Android actualmente no proporciona un medio de hacer esto con sólo un raw SQLiteDatabase (sólo proporciona el ContentResolver#notifyChange() y Cursor#setNotificationUri() Métodos, que se utilizan para notificar a todos los Cursor registrados bajo una determinada notificación Uri ).

Dicho esto, ahora sus opciones son:

  1. Implementar un observador usted mismo que es capaz de recibir notificaciones de SQLiteDatabase cuando el contenido cambia, y es de alguna manera capaz de retransmitir estas notificaciones a todos los Loader existentes en su aplicación. Escribí una extensa publicación en el blog sobre cómo implementar Loader s que podría resultar útil si deseas enfrentarte a este desafío. O…

  2. Utilice la biblioteca LoaderEx Mark Murphy y sólo realice modificaciones en la base de datos utilizando las operaciones AsyncTask proporciona su biblioteca. Tenga en cuenta que la razón por la que sus tareas actualizan el Loader es porque llaman onContentChanged en Loader inmediatamente después de que se realiza la inserción / actualización / supresión, diciéndole al Loader que el contenido ha cambiado y que debe actualizar sus datos.

  3. Sólo utilice un ContentProvider con un CursorLoader y puede utilizar el ContentResolver#notifyChange() para notificar al CursorLoader que se ha producido un cambio de contenido.

Estoy tratando de encontrar una mejor solución, y voy a informar en el futuro si alguna vez encontrar / implementar una, pero por ahora tendrán que hacer.

Aquí está mi solución, en mi onCreateLoader

 { Uri u = Uri.parse("content://what_string_you_want"); return new CursorLoader(this, yourURI, projection, null, null, null) { private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver(); @Override public Cursor loadInBackground() { Cursor c = YOUR_DATABASE.doYourQuery(...); if (c != null) { // Ensure the cursor window is filled c.getCount(); c.registerContentObserver(mObserver); } c.setNotificationUri(getContext().getContentResolver(), getUri()); return c; } }; } 

Después del código que cambiará DB, agregue

  getContentResolver().notifyChange( Uri.parse("content://same_with_first_string"), null); 
  • Visualización de la imagen desde la base de datos sqlite con el cursor en android
  • Consulta de SQLiteDatabase de Android con Regex
  • Sqlite no devuelve ninguna tabla, pero la tabla está presente cuando se obtiene en el dispositivo OnePlusTwo
  • ¿Cuál es la sintaxis de "no igual" en SQLite?
  • Android Guardar objeto como blob en sqlite
  • Recuperar blob de gran tamaño de la base de datos Android sqlite
  • ¿Cómo migrar la aplicación SQLite existente a la biblioteca de persistencia de habitaciones?
  • Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
  • Cómo formatear la cláusula WHERE y '?' En una consulta SQLite?
  • Examinar la base de datos SQLite de mi aplicación para Android?
  • Cómo establecer una columna como indexador único en Sqlite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.