2010-05-29 12 views
5

Tengo años de experiencia con el desarrollo de Microsoft .NET (principalmente C#) y he estado trabajando para llegar a Android y Java. Hasta ahora, he creado una pequeña aplicación con un par de pantallas y un proveedor de contenido funcional.En una aplicación de Android, ¿debería tener un proveedor de contenido por mesa o solo uno para toda la aplicación?

Todos los ejemplos que he visto para desarrollar proveedores de contenido suelen funcionar con una sola tabla, así que tuve la impresión de que esta era la convención.

Creé un par de proveedores de contenido más para otras tablas y me encontré con la excepción IllegalArgumentException de "URI desconocido" cuando traté de probarlos. La excepción es lanzada por uno de mis proveedores de contenido, pero no la que tenía la intención de llamar.

Parece que mi aplicación usa el primer proveedor de contenido en el archivo AndroidManifest.xml, lo que me hace preguntarme si debería tener un único proveedor de contenido para toda la aplicación.

¿Existen mejores prácticas y/o ejemplos para trabajar con varias tablas en una aplicación de Android? ¿Debo tener un proveedor de contenido por mesa o solo uno para toda la aplicación? Si el primero, ¿cómo puedo resolver los URI para el proveedor adecuado? Si es este último, ¿cómo puedo evitar que mi código de proveedor de contenido se contamine con declaraciones de cambio?

Respuesta

2

El 99% de las aplicaciones de Android no necesitan proveedores de contenido.

Los proveedores de contenido tienen un uso principal: la comunicación entre procesos. Si se encuentra:

  • esperando otros desarrolladores acceder a sus proveedores de contenido, o
  • están integrando a Android en lugares que requieren un proveedor de contenidos (por ejemplo, sugerencias de búsqueda para el cuadro de búsqueda rápida)

luego, y solo entonces, implementa un proveedor de contenido.

De lo contrario, todo lo que está haciendo es agregar gastos generales a su aplicación y hacer que su código sea más difícil de mantener.

Por lo tanto, si su aplicación es una del 99% que no necesita proveedores de contenido, simplemente deshágase de la que tiene y acceda a su contenido por otros medios (por ejemplo, SQLiteDatabase).

+0

Tiene sentido. Eliminé a los proveedores de contenido y acabo de ir con una clase DBAdapter. Mi código es mucho más limpio y más parecido a los objetos comerciales con los que estoy acostumbrado a trabajar. Gracias por la ayuda. –

+6

Downvoted, ya que esto no responde a la pregunta – Mbrevda

+2

Esta no es una respuesta a la pregunta – kord

10

Bueno, tengo que estar en desacuerdo con CommonsWare. Si desea evitar IllegalStateExceptions y otros problemas, debe usar Cursorloader. Manejan varias cosas por ti y se aseguran de que los cursores sean perfectos. Por lo tanto, necesita Proveedores de contenido. La pregunta inicial aún no ha sido respondida. No sé cuál es la mejor práctica para el número o los proveedores de contenido & tablas. pero dentro del método .query, verifica la ID de URI. puedes probar si el ID de uri tiene un valor específico y construir tu consulta de esa manera.

Cuestiones relacionadas