Vamos a describir cómo configurar los ajustes antes de generar la versión del videojuego Unity que podrá ejecutarse…
Caso práctico con GreenDAO: bbdd autenticación
2.
Caso práctico con GreenDAO: bbdd autenticación
Implementación de GreenDAO
Para la creación del nivel de persistencia de una aplicación Android, es necesario en primer lugar crear las entidades y los objetos DAO. Para ello, se recomienda crear un proyecto donde se generen todas las clases necesarias. Para ésto basta con usar GreenDAOGenerator, que se encargará de generar las entidades, los objetos DAOs y el acceso a la Base de Datos SQLite de Android.
A continuación se realizará un proyecto en Java paralelo al de Android como ejemplo, donde se implementarán las entidades y los objetos DAO de dichas entidades y se crearán los componentes de manera automática. Posteriormente trasladaremos la clase Java al proyecto Android.
En primer lugar, debemos importar al proyecto Java las librerías necesarias para el uso de GreenDAO:
- freemaker.java
- greenDAO-generator-javadoc.jar
- greenDAO-generator.jar y greenDAO.jar
Todas estas librerías podemos encontrarlas en la página oficial de GreenDAO
Comenzaremos creando una clase Java en nuestro proyecto de apoyo. Una vez creada, definiremos un método estático (al que llamaremos desde nuestro Método main()), donde debemos crear el esquema mediante la inicialización de la clase Schema, pasándole como argumentos la versión y el paquete donde se van a crear los componentes.
Posteriormente, definimos las entidades sobre las que se van a realizar las operaciones. Por último, se generan las entidades a partir del generador DAO, que se encuentra en la clase de.greenrobot.daogenerator.DaoGenerator, y realizamos una llamada al método generateAll(), recibiendo como parámetros la referencia al esquema y la carpeta de salida.
Tras la generación del esquema, añadiremos las entidades que creamos oportunas (tablas a nivel de Base de Datos), para posteriormente indicar las propiedades de la entidad (columnas o campos a nivel de Tablas).
En el ejemplo que nos ocupa, se creará un esquema para la creación de una Base de Datos, con una tabla, encargada de autenticar un usuario dado de alta en el sistema (Login o sistema de autenticación):
El código de la clase Java encargada de crear el esquema en el paquete indicado sería:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public static void main(String[] args) { try { Schema schema = new Schema(1,"com.GreenDAO.esquema"); crearEntidad(schema); new DaoGenerator().generateAll(schema,"../ORM_GreenDAO/src"); }catch (Exception ex) { System.out.println (ex.getMessage()); } } private static void crearEntidad(Schema schema){ try { //Añadimos una tabla al Esquema o BD Entity autenticacion = schema.addEntity("Login"); //Creamos un campo ID de tipo autonumérico autenticacion.addIdProperty(); //Se añaden los campos Usuario y Password, que no admitirán valores nulos autenticacion.addStringProperty("Usuario").notNull(); autenticacion.addStringProperty("Password").notNull(); }catch (Exception ex) { System.out.println(ex.getMessage()); } } |
Referenciar el proyecto Java en Android
Una vez generada la capa de persistencia (recordemos que le indicamos el package de nuestro proyecto Android), solo necesitaremos implementar la lógica necesaria para hacer uso de los métodos definidos en nuestra capa de persistencia. Además deberemos importar la librería greenDAO.jar a nuestro proyecto Android.
Para instanciar un DAO de una entidad en una actividad Android, deberemos incluir el siguiente código:
Variables a nivel de Clase:
1 2 3 4 5 6 7 8 |
[...] private SQLiteDatabase db; private DaoMaster daoMaster; private DaoSession daoSession; private LoginDao loginDAO; [...] |
Dentro del método onCreate() de la Activity principal:
1 2 3 4 5 6 7 8 9 |
[...] DevOpenHelper openHelper = new DaoMaster.DevOpenHelper(this, "Autenticacion", null); db = openHelper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); loginDAO = daoSession.getLoginDao(); [...] |
Métodos que nos permiten cazar el evento On Click de los diferentes botones inicializados:
- Método Insertar nuevo Usuario:
Permite almacenar los valores de usuario y password introducidos en los componentes EditText de la interfaz de usuario. Comprobamos que los campos estén debidamente cumplimentados antes de guardar el registro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public void registrarCredenciales(View view) { try{ Login login = new Login(); String usuario = txtUsuario.getText().toString(); String password = txtPassword.getText().toString(); //Comprobamos que los campos no estén vacíos if((usuario.equals(""))) { Toast.makeText(this, "Debe indicar el Usuario.", 2000).show(); } else if(password.equals("")) { Toast.makeText(this, "Debe indicar el Password de Usuario.", 3000).show(); } else { login.setUsuario(txtUsuario.getText().toString()); login.setPassword(txtPassword.getText().toString()); loginDAO.insert(login); Toast.makeText(this, "Datos almacenado->\nID: " + login.getId() + "\nUsuario: " + login.getUsuario(), 3000).show(); } Log.d("GreenDAO", "Nuevo usuario almacenado, ID: " + login.getId()); }catch(Exception ex) { System.out.println(ex.getMessage()); } |
- Método Borrar Usuario:
Permite borrar el usuario, mediante la indicación de su identificador único de registro. Para ello, previamente deberemos comprobar si el usuario indicado existe, para posteriormente indicar el número de identificador (antes de borrar se comprueba que el campo ‘ID’ no esté vacío):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public void borrarRegistro(View vew) { try{ String id = txtID.getText().toString(); if(id.equals("")) { Toast.makeText(this, "Debe indicar el id del usuario a borrar.", 3000).show(); } else { Long identificador = Long.parseLong(id); loginDAO.deleteByKey(identificador); Toast.makeText(this, "Datos borrados->\nID: " + login.getId(), 3000).show(); } }catch(Exception ex) { System.out.println(ex.getMessage()); } } |
- Método Comprobar existencia de Usuario:
Permite consultar si el usuario indicado en el EditText de la interfaz de usuario existe en nuestra Base de Datos (previamente a la comprobación nos aseguramos de que el campo ‘Usuario’ no esté vacío):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public void iniciarSesion(View view) { String usuario = txtUsuario.getText().toString(); List listUsuario = this.loginDAO.queryBuilder().where(Properties.Usuario.eq(usuario)).list(); if(usuario.equals("")) { Toast.makeText(this, "Debe indicar el Usuario a comprobar.", 3000).show(); } else { if(listUsuario!= null) { for(Login login : listUsuario) { Toast.makeText(this, "El usuario indicado existe en la Base de Datos." + "\nID:" + login.getId() + "\nUsuario:" + login.getUsuario(),3000).show(); } } else { Toast.makeText(this, "No hay coincidencias.", 3000).show(); } } } } |
En el siguiente artículo de esta serie sobre ORM, te mostramos en un videotutorial cómo desarrollar este caso práctico. También, en ese artículo, podrás descargar los dos proyectos de este caso práctico en formato zip.
Autor: José Antonio Gázquez Rodríguez – Academia Android