En este artículo te enseño, con un pequeño proyecto, cómo crear una base de datos Room en Android.
Como te comenté en un artículo anterior, estoy aprendiendo a programar aplicaciones para Android realizando proyectos. Con Android Programming: The Big Nerd Ranch Guide aprendí a crear bases de datos utilizando SQLite, que implica escribir bastante código. Por esa razón, no tardé mucho en encontrar una solución más sencilla: utilizar una base de datos Room en Android.
¿Qué es una base de datos Room en Android?
Esta explicación va a ser breve y lo menos técnica posible:
A esto se reduce el mínimo conocimiento teórico que tienes que saber. A continuación te voy a explicar, con un ejemplo práctico, cómo crear una base de datos Room en Android.
Cómo crear una base de datos Room en Android
1._ Crea un proyecto en Android Studio
Abre Android Studio, y haz clic en File > New... > New Project.... En Application Name introduce Mi nota. Puedes dejar el Company Domain que te aparece de manera predeterminada. Pulsa Next.
A continuación, selecciona la versión de Android más antigua con la que va a funcionar tu aplicación. Yo siempre selecciono la 6 (puedes utilizar la versión que quieras). Pulsa Next.
Selecciona Empty Activity, y pulsa Next.
Deja los valores predeterminados y pulsa Finish para crear el proyecto.
Espera unos segundos mientras se crea el proyecto.
¿Sabes que te regalo un curso de Android Studio si te suscribes?
Aprenderás todo lo que necesitas saber para crear una aplicación, sincronizarla con un repositorio git, exportar el archivo .apk de la aplicación y, como bonus, cómo publicarla en Google Play (además, recibirás también un curso gratuito de IntelliJ IDEA, y te avisaré cada vez que publique un curso nuevo).
2._ Añade RoomDatabase a tu proyecto
Copia/pega las siguientes dos líneas en build.gradle (Module: app):
Si al copiar/pegar te salen marcados de amarillo, es porque existe una versión más nueva. En ese caso, pincha las líneas marcadas de amarillo (una cada vez), pulsa Alt + Intro y selecciona la primera opción del menú.
Acto seguido, haz clic en Sync Now, arriba a la derecha.
3._ Crea el Schema de tu base de datos
El Schema es la estructura de la base de datos. Con anterioridad a la aparición de las bases de datos Room era algo que tenías que hacer manualmente; ahora Room se ocupa de generarlo de manera automática en un archivo con extensión .json.
Para ello, introduce las siguientes líneas en build.gradle (Module: app):
El archivo se generará en la carpeta app/schemas/<paquete de tu proyecto>; el nombre se corresponde con la versión correspondiente de la base de datos: 1.json, 2.json, etc.
4._ Crea la clase Nota
Esta aplicación va a constar de una única pantalla, en la que podrás introducir una nota que se guardará en la memoria del dispositivo (en la base de datos Room que vas a aprender a crear en este artículo).
Para crear la nueva clase, haz clic con el botón derecho en el paquete del proyecto, y haz clic en New > Java class.
La clase se va a llamar Nota.
Va a constar de dos elementos: una id y el contenido de la nota, ambos de tipo String.
Si Android Studio te marca algo con rojo (como lo hará con UUID), pon el cursor encima y pulsa Alt + Intro para importar el paquete necesario.
Genera en Android Studio el constructor (que asigna el mId a cada elemento), y los getters y setters de todos los elementos, incluso de mId, aunque no lo uses, porque la base de datos lo va a necesitar.
Anotaciones utilizadas
(Las anotaciones son las etiquetas con una @ al principio.)
Esta anotación hace referencia a que es una instancia de esta clase lo que vamos a guardar en la base de datos. No es obligatorio especificar el nombre de la tabla de la base de datos; de manera predeterminada recibe el nombre de la clase (SQLite no distingue entre mayúsculas y minúsculas). Así, en este caso la clase se llamaría nota de todas formas.
El resto de anotaciones describen la estructura de la tabla en la base de datos:
Identifica a cada objeto y no puede ser null. Por esta razón, le he asignado esta anotación (@NonNull) al campo mId.
Esta anotación se utiliza para definir una columna, en el sentido de que le damos un nombre a la columna y, a continuación, le asignamos un campo.
Cómo crear una base de datos Room en Android, en 5 minutos. #android
5._ Crea la base de datos Room en Android
5.1 ._ Crea la clase que instancia la base de datos (NotaDatabase)
Esta clase es diminuta; se trata de una clase abstracta que contiene un único método abstracto, cuya devolución es una instancia de la interfaz que contiene los métodos que gestionan la base de datos.
Crea la clase igual que la anterior, pero llámala database.NotaDatabase y que extienda RoomDatabase; además, hazla abstracta.
Al darle ese nombre, estarás creando una subcarpeta, en la que guardarás los dos archivos de la base de datos:
El contenido de esta clase es el que sigue:
Nota.class se trata de la clase cuyos objetos vas a guardar en la base de datos; el número de versión empieza a contar por 1 y tienes que cambiarlo cada vez que modifiques la base de datos.
Haz, con Alt + Intro, todos los imports que sean necesarios. NotaDao te saldrá marcado de color rojo porque aún no existe, pero estamos a punto de crearla.
5.2 ._ Crea la interfaz que gestiona la base de datos (NotaDao)
Pon el cursor en la devolución del método que acabas de crear, ese NotaDao rojo. Pulsa Alt + Intro y selecciona Create interface 'NotaDao':
Acepta las opciones predeterminadas en la ventana que se te abra. Se te creará la interfaz en el subpaquete database que creaste antes. Márcala como public.
Esta interfaz que acabas de crear contiene una serie de métodos para modificar la base de datos, así como para extraer los datos almacenados.
Métodos de la interfaz NotaDao
Como ves, entre paréntesis se utiliza sintaxis SQL. "SELECT * FROM nota" equivale a decir "Selecciónalo todo de la base de datos llamada nota"; "SELECT * FROM nota WHERE mId LIKE :uuid" equivale a "Selecciona todos los objetos (hay uno por fila) donde el campo mId coincide con el parámetro uuid".
5.3 ._ Crea una clase que haga uso de la interfaz NotaDao
La base de datos Room en Android ya está creada; lo único que queda es hacer uso de la interfaz NotaDao, y a continuación pasaremos a crear la interfaz de usuario.
Crea una nueva clase, y llámala NotaLab. Vamos a utilizar una instancia de NotaLab para interactuar con la base de datos.
Qué tienes que saber sobre la clase NotaLab:
Los métodos de la clase NotaLab hacen una llamada a los métodos de la interfaz NotaDao, sin implementarlos. Como ya te dije al principio, la base de datos Room en Android simplifica muchísimo el funcionamiento de las bases de datos SQLite.
6._ Crea la interfaz de usuario
La interfaz va a ser muy sencilla. Constará de un RelativeLayout que contendrá un campo de texto, donde introducir el texto de la nota, y dos botones: GUARDAR (que servirá tanto para crear una nota nueva como para actualizar una nota que ya existe) y BORRAR.
Si introduces en la configuración de la interfaz de usuario texto (como el nombre de los botones, por ejemplo) Android Studio lo va a marcar de amarillo, para que, en lugar de texto utilices una referencia a dicho texto. Así, puedes traducir dicho texto a varios idiomas y el usuario podrá ver la interfaz en el idioma de su dispositivo.
Pon el cursor en el texto que quieres convertir en una referencia, pulsa Alt + Intro y selecciona Extract String resource. Especifica un Resource name si no lo hay, y pulsa OK.
El texto al que se hace referencia a partir de ahora en el código se encuentra en res/values/strings.xml.
La interfaz de usuario queda tal y como se ve en la siguiente imagen:
A continuación, toca conectar la interfaz de usuario con el código Java.
7 ._ Conecta la interfaz de usuario con el código Java
Instala la aplicación en un dispositivo Android, guarda una nota y cierra y vuelve a abrir la aplicación: la nota aparecerá en el campo de texto. ¡CONSEGUIDO! Has aprendido a crear una base de datos Room en Android. Fácil, ¿verdad?
En la próxima entrada te enseñaré a acceder a la base de datos creando un nuevo hilo de ejecución, y cómo modificarla sin perder los datos almacenados.
¿Te atreves a hacer más compleja esta aplicación?
MiNota es una app muy básica, ¿te atreves a usarla como ejercicio para practicar? Por ejemplo, puedes crear un nuevo método en MainActivity que se encargaría de mostrar los Toasts. ¡Anímate y cuéntame tu experiencia en los comentarios!