2012-06-13 37 views
29

Estoy intentando actualizar mi aplicación anterior en la que algunos métodos están en desuso. Descubrí que si quiero trabajar con ListView que muestra datos de db, debería usar LoaderManager + CursorLoader. CursorLoader funciona con proveedores de contenido. Entonces, ¿para cada tabla en mi base de datos debo crear proveedor de contenido ahora? Por qué debería ? Por lo que sé, los proveedores de contenido se utilizan para compartir cierta información de BD con otras aplicaciones, pero mi aplicación no comparte ninguna información. Entonces, ¿puedo usar CursorLoader sin proveedores de contenido?Android: CursorLoader, LoaderManager, SQLite

+2

Eche un vistazo a la publicación de mi blog sobre el tema: [** Comprensión del 'LoaderManager' **] (http://www.androiddesignpatterns.com/2012/05/why-you-should-use-loadermanager.html) –

+0

@Jim ¿hay algún problema con el proveedor de contenido podría ayudarme? –

Respuesta

22

He escrito un blog post sobre este tema. También puede consultar este answer para obtener más información. Espero que te aclare las cosas.

Como mencionó Barak, uno puede implementar un CursorLoader sin proveedores de contenido extendiendo la clase AsyncTaskLoader<Cursor>. Dicho esto, la mayoría de los tutoriales y el código de ejemplo usan ContentProvider s, y parece que el equipo de Android recomienda su uso también. También es mucho menos complicado que implementar tu propia clase.

Dicho esto, si realmente no desea utilizar los proveedores de contenidos, Dianne Hackborn (uno de los desarrolladores de Android marco, y también conocido como "hackbod" aquí en la SO) sugiere escribir su propio cargador que utiliza su clase de base de datos en lugar de un proveedor de contenido. La forma más fácil es simplemente tomar la fuente de la clase CursorLoader de la biblioteca de compatibilidad, y reemplazar las consultas del proveedor con consultas a su propia clase de ayuda db.

+2

Creo que vale la pena mencionar que el uso de 'ContentProvider's solo se recomienda si planea proporcionar datos a otras aplicaciones. Si no lo hace (es decir, los datos son privados para su aplicación), se le recomienda utilizar bases de datos simples de SQLite. Para obtener más información, consulte los documentos de [ContentProvider] (https://developer.android.com/reference/android/content/ContentProvider.html). – Felix

+0

Creo que "tomar la fuente de la clase CursorLoader de la biblioteca de compatibilidad, y ..." es la mejor opción, ¿no? – BornToCode

+0

Tuve que extender 'CursorLoader' con mi propia clase para manejar' OrmLite'. – theblang

0

Sí puede, puede tener cargadores de datos personalizados que pueden cargar objetos que defina o cualquier tipo de objeto o lista en ese asunto.

Basta con mirar las muestras del sdk de Android para LoaderCustomSupport.java en las muestras de la biblioteca de compatibilidad y demostraciones.