viernes, 4 de mayo de 2012

Android: Creación de un ContentProvider

Un ContentProvider es una interfaz que nos brinda Android para acceder a una base de datos que se encuentre en nuestro teléfono. Y hacer que las aplicaciones puedan compartir información fácilmente.

Los pasos a seguir para la implementación son los siguientes:
  1. Extender la clase ContentProvider
  2. Crear la base de datos
  3. Implementar getType
  4. Implementar onCreate
  5. Implementar los metodos CRUD
  6. Registar el ContentProvider en AndroidManifest.xml

Se va a explicar como crear un Content Provider que llevara un registro de los ficheros que abre un usuario.

Extender la clase ContentProvider
Al definir que nuestra clase extiende ContentProvider se nos crear el esqueleto básico de nuestra clase.
Que debería ser algo así:


Crear la base de datos
Ya con la estructura creada, tenemos que definir una URI para nuestra base de datos, para que el sistema pueda identificarla. En el futuro cuando llegue el momento que queramos realizar alguna consulta a la base de datos se hará a través del URI que vamos a definir. Se definen en la linea 2 y 3.

Ademas del URI, hay que definir una serie de propiedades, entre paréntesis se indica el numero de linea:
  • Tipos de URI, un ítem especifico o un conjunto de ellos (6 - 11)
  • La base de datos, nombre, versión y nombre de la tabla (14 - 20)
  • Columnas de la tabla y su respectivo indice (23 - 28)
  • Controlador de peticiones (30-36)

Ahora hay que pasar a la creación de la BD, para ello hay que implementar SQLiteOpenHelper como una clase privada. Y como pueden ver en la constante CREATE_TABLE se define la creación de la tabla con SQL usando las columnas definidas anteriormente. Mediante SQLiteOpenHelper el inicio de la base de datos se hace de manera perezosa, es decir hasta que no se necesita no se inicia. Evitando que nuestra aplicación se inicie mas lentamente, y que surjan errores relacionados con la base de datos al iniciar la aplicación.



Implementar getType

Este metodo se encarga de analizar la consulta y decidir que tipo de datos se esta consultando. Los dos tipos de datos fueron definidos en CONTENT_TYPE_LISTCONTENT_TYPE_ITEM, el tipo de datos debe empezar por vnd.android.cursor.dir/ y vnd.android.cursor.item/ para una lista y un item especifico, respectivamente.



Implementar onCreate

Como estamos usando SQLiteOpenHelper, tan solo le indicamos que queremos crear la base de datos y  este mismo ya se encarga de hacerlo cuando sea necesario.


Implementar los metodos CRUD
Al definir como realizar las consultas a la base de datos tenemos que ver si se trata de un item especifico  o de todos.

Registar el ContentProvider
Suponiendo que nuestro ContentProvider se encuentra en un paquete llamado provider, tenemos que registrarlo en el Manifest