sábado, 25 de octubre de 2014

Como instalar greenDao en Android Stuido








Cada vez que me tengo afrontar con algún proyecto en Android y que este implique guardar datos en SQLite me parece bastante cansino y tedioso.

Así que buscando soluciones para evitar eso me encontré con este buena librería.
GreenDao se trata de una ORM (Object relational mapping) para Android que te ayudara en los registros de una base de datos al tratarlos como objetos en tu código. Dicho de otra forma y poniéndote un ejemplo en código ,por si te tiene buena pinta y quieres seguir leyendo:

¿ Como se crearía una tabla llamada Archivo con clave primaria como Id y claves secundarias como Nombre,Disponible,Fecha y Enlace ?

Entity archivo = schema.addEntity("Archivo"); 
archivo.addIdProperty();
archivo.addStringProperty("Nombre").notNull();
archivo.addBooleanProperty("Disponible");
archivo.addDateProperty("Fecha");
archivo.addStringProperty("Enlace");
¿ Y una inserción ?
Archivo archivo = new Archivo(null, "Programa 1", true, new Date(),"www.unenlace.com");
archivoDao.insert(archivo);
Te animas? Pues vamos :)



Para iniciar esta instalación lo primero que haremos sera crear un modulo para greenDao generator. En Android Studio vamos a " File -> New Module.. " . Y seleccionamos la opción "Java Library"





Nombrare mi clase como " MiDaoGenerator " , junto con el nombre de la librería también y agregare el nombre del paquete tal como se muestra en la foto




Una vez finalizado obtendremos una estructura así



Esto ya esta en marcha, vamos agregar la dicha librería en el " build.gradle " en la sección " dependencies " para que se descargue y se instale automáticamente : compile('de.greenrobot:greendao-generator:1.3.1')


Te queda algo tal que así: 

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile('de.greenrobot:greendao-generator:1.3.1')
}

Hasta la fecha actual , la versión mas actual del generator es la 1.3.1, pero entra aquí y comprueba que no existan mas nuevas ( Fíjate en la columna Latest versión y escribela si hubiera una superior )

Una vez listo sincroniza tu gradle para que inicie todo el proceso mediante " Tools > Android > Sync Project with Files "


Vamos ahora al codigo en question. Dirigte al archivo " MiDaoGenerator.java " y escribimos 

package com.aroma_android.daogenerator;
import java.lang.Exception;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class MiDaoGenerator {
public static void main(String args[]) throws Exception {
Schema schema = new Schema(1, "com.aroma_android.daogenerator");
Entity archivo = schema.addEntity("Archivo"); 
archivo.addIdProperty();
archivo.addStringProperty("Nombre").notNull();
archivo.addBooleanProperty("Disponible");
archivo.addDateProperty("Fecha");
archivo.addStringProperty("Enlace");
new DaoGenerator().generateAll(schema, ".");
}
}


Preparamos a continuación la configuración del compilador en " Run > Edit Configurations ... " , acto seguido el símbolo + y seleccionando tipo " Application " y dejándolo tal como en la imagen:


" Main Class " es la clase que estamos trabajando ahora mismo, " Working Directory " sera la salida de los archivos generados por el daoGenerator. Yo he seleccionado directamente mi raíz del proyecto. " Classpath " se debe de seleccionar el modulo.

Si te das cuenta en la ultima linea, donde estoy generando la tabla en cuestión mediante " generateAll " , le indico mediante String un punto; este significa donde serán las salidas de los archivos generados , que en mi caso en el mismo directorio donde le indique anteriormente en " Working directory ".


Una vez con todo esto solo nos falta darle al play para que se genere todos los archivos.
En el ultimo punto para la configuración de greenDao en nuestro proyecto solo tendremos que decirle en el build.gradle ( ojo! de nuestro proyecto android ) que agregue el directorio de los archivos generados como parte de él mismo, en el bloque de android {}

sourceSets {
        main {
            java {
                srcDir 'com/aroma_android/daogenerator'
            }
        }
    }

Aprovecharemos tambien para añadir greendao tambien compile('de.greenrobot:greendao:1.3.7') en el bloque de " dependencies {} "
Y volvemos a sincronizar nuestro Gradle para que se efectúen los cambios.


¿ Como iniciamos todo esto ?

Primero de todo, debemos de recuperar el control de nuestra base de datos tal que asi

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "archivo-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
ArchivoDao archivoDao = daoSession.getArchivoDao();
De esta forma ya podriamos insertar un nuevo registro
Archivo archivo = new Archivo(null, "Programa 1", true, new Date(),"www.unenlace.com");
archivoDao.insert(archivo);
o borrarlo por id
archivoDao.deleteByKey(archivo);
actualizar seria
archivo.setNombre("Programa 2");
archivo.update(archivo);
o una consulta en forma de lista
archivoDao.queryBuilder().where(ArchivoDao.Properties.Disponible.eq(true)).list();
Si quieres saber mas, visita el FAQ de su pagina

2 comentarios:

  1. que pasa si quiero mandar una actualizacion de mi app en la cual se haya visto afectado el esquema de la base de datos?? hay alguna manera para invocar a onUpgrade??

    ResponderEliminar
    Respuestas
    1. Claro! Solo debes de crearte una clase , llamemosle " TuAppSQLiteHelper " que extienda de " DaoMaster.OpenHelper ". Al hacerlo te pedira que sobreescribas algunos metodos de entre ellos onCreate() y onUpgrade().

      Eliminar