Etiqueta: GreenDao Generator

GreenDao y GreenDaoGenerator

Tras revisar la WebApi y AndroidApi de Spotify, muchas de las peticiones necesitan la autenticación del usuario, por lo que necesitamos que para ellas el usuario tenga su sesión iniciada, sea por Spotify o Facebook, de eso ya se encarga Spotify.

Para ello utilizaremos la librería de Spotify Auth para Android que veremos en el siguiente post.

Esa librería, si se hace login correctamente, nos devolverá un token de usuario. Ese token, deberíamos guardarlo en algún lado para no perderlo. Y como es propio del usuario, estaría bien que estuviera cifrado.

GreenDao

He elegido GreenDao porque ya había trabajado con él en otros proyectos y porque sabía que tenía una opción de cifrado de la base de datos.

En esta web podemos encontrar información de la base de datos cifrada también para Android Nougat (v7) y las penalizaciones de tamaño que tiene contra una db SqLite.

GreenDao Generator Encryption

Vamos a usar el generador de GreenDao para olvidarnos de crear los DAOs de la app que queremos guardar en base de datos.

Para integrar GreenDao en nuestro proyecto, adaptaremos la información de esta entrada de Antonina Tkachuk a nuestro caso concreto.

Para ello crearemos un nuevo módulo en nuestro proyecto y seleccionaremos “Java Library

azboac4

Le ponemos el nombre que queramos (nosotros hemos elegido “greendao-gen“) y le ponemos también el nombre de la clase que queramos, como MainGenerator por ejemplo.

En el archivo Gradle añadimos la librería de GreenDao Generator Encryption para comenzar a usarla:

compile 'org.greenrobot:greendao-generator-encryption:2.2.0'

MainGenerator

Dentro de esta clase, pondremos la estructura de la base de datos que queremos usar.

Empezaremos creando 2 variables para obtener la ruta donde está el código de nuestra app.

private static final String PROJECT_DIR = System.getProperty("user.dir").replace("\\", "/");
private static final String OUT_DIR = PROJECT_DIR + "/app/src/main/java";

Y crearemos también un método “main” en el que crearemos nuestro Scheme de la base de datos indicándole por parámetro qué versión de nuestro esquema es y en qué ruta queremos que guarde los archivos generador.

Por último, usando DaoGenerator,  generamos todo el esquema en el directorio de salida que le hemos indicado antes.

Schema schema = new Schema(1, "com.afrasilv.spotifyclientapp.model");

addTables(schema);

new DaoGenerator().generateAll(schema, OUT_DIR);

Como realmente lo único que queremos guardar en la base de datos por ahora, va a quedar la estructura un poco absurda, pero será más fácil de ampliar por si en un futuro vemos que necesitamos crear nuevas tablas.

Dentro de addTables, haremos llamadas a los métodos que se encargan de añadir al Scheme las Entities de las que se va a componer la db.

private static void addTables(Schema schema){
    // Entities
    Entity token = addToken(schema);
}

private static Entity addToken(Schema schema){
    Entity token = schema.addEntity("DBToken");
    token.addIdProperty().primaryKey().autoincrement();
    token.addStringProperty("tokenvalue").notNull();

    return token;
}

En addToken le añadimos la Entity “DBToken” al esquema indicándole que tiene una PK es que ID y que se autoincrementa y que además tiene también una propiedad String que es “tokenvalue” que es la que más nos interesa.

Con lo que tenemos ya, solo tenemos que pulsar con el botón derecho en MainGenerator y seleccionar “Run MainGenerator.main()” y automáticamente se nos habrá creado dentro de nuestro proyecto en el módulo de la app, una carpeta “model” con los ficheros de la base de datos.

En la siguiente entrada veremos cómo crear un gestor para nuestra base de datos, aunque en esta ocasión será muy simple.

Todo el código de la app lo podréis ver en el repositorio de GitHub!!