Uso básico de ADA Framework: Parte I

Como os comenté en la última entrada, aquí traigo un ejemplo de cómo funciona este maravilloso framework de persistencia para aplicaciones Android. Como os digo, esto es solo un ejemplo con el que empezar a investigar las posibilidades que nos brinda el ADA Framework, por lo que no todo queda aquí.

Entorno de desarrollo:

  • Windows 7 Home Premium 64bits.
  • Eclipse Indigo con ADT Plugin for Eclipse instalado.
  • Android SDk 2.2 (min. sdk 8).
  • ADA Framework 1.4.5.
  • Probado en Samsung Galaxy ACE GT-S5830 con Android 2.3.3
  • El repositorio de SVN para descargar el proyecto (Parte I yParte II) es: svn://svn.code.sf.net/p/adalab1/code/trunk

A continuación pasamos a la construcción del proyecto Android desde nuestro IDE Eclipse. Para ello en File > New > Android Project podemos indicar los datos de nuestro proyecto:

A continuación añadimos el .jar de la dependencia d ADA Framework al proyecto. Para ello vamos a crearnos una carpeta libs en el directorio raíz del proyecto donde suelo colgar las dependencias de terceros que empleo en las aplicaciones. Por lo tanto, la estructura de nuestro proyecto inicial debe tener un aspecto similar a este:

Donde como se ve, se ha añadido la mencionada carpeta libs y la dependencia del framework: com.desandroid.framework.ada_v1.4.5.jar.

Aquí podemos ya empezar a picar código que es lo que le gusta a los programadores, aunque siento decepcionaros porque , como ya he mencionado, ADA Framework facilita mucho el trabajo simplificando el código y por tanto esto todo muy mecánico a la hora de trabajar con él😉.

Lo primer que vamos a hacer es crear las dos clases que podríamos decir que en una aplicación que aplique el patrón de diseño MVC (modelo vista controlador) pueden localizarse en la parte del modelo y que están relacionadas con la persistencia de los datos en la base de datos. Estas clases son:

La primera clase la llamaremos User y debe extender de com.desandroid.framework.ada.Entity. Representa una entidad dentro de mi modelo entidad-relación en mi base de datos. Vamos a echar un vistazo al código para ver como mediante anotaciones podemos tener nuestra entidad definida sin tener que añadir los script de creación de tablas que se utilizan con android.database.sqlite:

si habéis utilizado algún framework de persistencia para desarrollar aplicaciones en otros entornos, puede que os sea familiar esta forma de trabajar. Por ejemplo si habéis utilizado Hibernate. Bueno! No tiene mucho que explicar porque es bastante intuitivo.

Si nos fijamos,  encima del nombre de la clase indicamos @Table(name = “tUser”) que quiere decir que la clase User representa la tabla tUser en nuestra base de datos. Y de igual forma podemos hacer esto con las columnas de la tabla utilizando la anotación @TableField(…) donde además podemos añadir propiedades como:

  • name = “[FIELD_NAME]” , donde FIELD_NAME es el nombre que va a tener la columna en la base de datos y que se correpsonderá con este atributo de la clase User
  • datatype = “[FIELD_DATATYPE]” , donde FIELD_DATATYPE es el tipo de la columna en la base de datos y para indicarlo debemos utilizar los tipos definidos en la clase Entity como constantes
  • required = [TRUE|FALSE], donde indicamos si el campos es o no requerido para poder almacenar un registro User en la base de datos.
  • maxlength = [INTEGER], donde indicamos el número máximo de caracteres que permite introducirse en la columna.
Como vemos en el código, solo hemos añadido las propiedades name y datatype pero existen todas las que muestro a continuación y que iremos viendo en posteriores entradas:
Posibles propiedades de una columna
En principio nos vale con las que hemos definido pero para probar alguna más he añadido las propiedades restrictivas  required y maxLengh al campo email quedándome así:

NOTA: Para conocer los posibles tipos que podemos utilizar en DATATYPE podemos escribir Entity. CTRL+SPACE y aparecerán las distinta alternativas:

Tipos para las columnas en la Base de Datos

La segunda clase la llamaremos ApplicationDataContext y debe extender de com.desandroid.framework.ada.ObjectContext. Es el manejador de las clases com.desandroid.framework.ada.Entity de la aplicación y el que realiza las operaciones CRUD que permiten persistir datos en la BD y extraer información de la misma.

Para ver todos sus métodos podemos hacerlo desde el código o bien accediendo a la sección de la página web del framework donde se encuentra toda la documentación de la API de ADA Framework. Veamos nuestro código por orden, de forma descendente:

En primer lugar la declaración de dos constantes donde indicamos qué versión de la base de datos vamos a utilizar y el nombre del fichero que representa esta base de datos DATABASE_VERSION y DATABASE_NAME; sin embargo, esto no es obligatorio, solo lo he declarado para el caso de este ejemplo, ya que como veremos a continuación podemos indicar estos valores de otra forma sin que contengan valores constantes.

A continuación encontramos la declaración de la variable usuariosSet del tipo com.desandroid.framework.ada.ObjectSet cuya función es la de permitir realizar operaciones SELECT, CREATE, UPDATE  y DELETE contra tabla “tUser” de la base de datos.

Observamos que este ObjectSet, en su declaración, tiene definido el tipo de objetos que va a manejar (que deben heredar de com.desandroid.framework.ada.Entity), en nuestro ejemplo User de manera que:

  • Si vamos a realizar alguna de las 3 operaciones de modificación de la base de datos (CREATE, UPDATE, DELETE) nuestro ObjectSet deberá recibir el objeto del tipo indicado entre “<>” con el que se va a trabajar.
  • Si vamos a realizar la operación de extracción de información de la base de datos (SELECT) nuestor ObjectSet se rellenará con objetos de la tabla User.

Finalmente encontramos 3 constructores, de los cuales, al menos 1 es obligatorio (esto nos lo indicará el propio Eclipse). Con los constructores instanciaremos nuestro com.desandroid.framework.ada.ObjectContex indicando, en función del constructor los siguientes parámetros:

  • android.content.Context pContext: Context de Android.
  • java.lang.String pDatabaseName: Nombre del fichero de la Base de datos.
  • int pDatabaseVersion: versión de la base de datos.
Como vemos, si utilizamos alguno de los constructores donde indicamos el nombre y/o versión de al base de datos podemos prescindir de las constantes mencionadas al principio. En principio, y para nuestro ejemplo básico, nos quedaremos con la opción 1 en la que solo pasamos el parámetro Context y añadiremos en el propio constructor la inicialización del com.desandroid.framework.ada.ObjectSet e indicaremos que eleve las posibles excepciones provocadas en dicha inicialización con throws AdaFrameworkException. Queda por tanto así:
Hasta aquí ya tenemos definida nuestra capa de persistencia de nuestro proyecto Android, a continuación solo hay que poner en práctica su funcionamiento. Esto lo vamos a hacer partiendo de una Activity en la que podamos dar de alta Usuarios y a continuación mostrar un listado de los usuarios registrados en la base de datos.
Puesto que esta entrada solo trata sobre explicar ADA Framework nos centraremos en la parte del código que realiza las llamadas a las operaciones de la capa de persistencia.
Nuestro formulario para dar de alta usuarios será el siguiente:
Una vez que clicamos en ENVIAR se ejecutará el código correspondiente al método SAVE del a actividad MainActivity que es el siguiente:
Y con ello obtendremos en la consola de log de Eclipse dedicada a Android un mensaje como el siguiente:
Como vemos, lo que se ha producido es:
  1. Se recogen los valores de los campos del formulario.
  2. Se construye un objeto User con los valores recogidos.
  3. Se invoca al método SAVE del ObjectSet de nuestro ApplicationDataContext pasándole como parámetro el USER.
  4. Se ejecuta la sentencia SQL Insert.
Podemos apreciar la potencia del framework que ha sido capaz de identificar que la tabla tUser no existía en la base de datos y por tanto previamente la ha generado a partir de las anotaciones de la clase User.

Acerca de vicmonmena

Just trying to contribute with my code to make this world easier
Esta entrada fue publicada en Android y etiquetada , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s