Vamos a practicar un poco más con SQLite y Android con otro ejercicio práctico: la creación de una agenda.

Se pretende realizar una aplicación de una agenda en donde se escriba un identificador, el número de teléfono y el nombre de una persona.

Viéndolo desde el punto de vista de diseño de bases de datos o experiencia de usuario el ejercicio no estará muy bien; pero servirá mucho para practicar porque veremos cómo:

  1. Insertar un registro en SQLite
  2. Obtener un registro por ID
  3. Comprobar si un registro ya existe
  4. Listar los registros existentes

Si quieres ver un ejemplo en donde también se Edita y Elimina mira el CRUD de SQLite con Android en donde trabajamos con mascotas. También te invito a que pruebes la app para el control de gastos que publiqué hace algunos días.

Repositorio en GitHub

A través del post mostraré el código más importante, pero si quieres ver el código completo mira el repositorio en GitHub.

Más ejercicios

Anteriormente publiqué otros ejercicios con Android:

Otras cosas que he escrito sobre Android las puedes encontrar aquí. Ahora sí, comencemos.

Diseño de actividad principal

La actividad principal tiene 3 botones: uno para insertar un registro, otro para consultar por identificador y finalmente uno para listar todos los registros existentes.

Diseño de actividad principal de Agenda en Android

Diseño de actividad principal de Agenda en Android

El código del layout es el siguiente:

Para el funcionamiento simplemente instanciamos los botones, agregamos listeners y en cada uno de ellos llamamos a startActivity pasándole un Intent que lleva a otra actividad.

Por el momento, las clases de destino no existen; vamos a crearlas más tarde. Fíjate en que cada llamada a findViewById tiene que ver con el id que tiene cada botón.

Utilerías

Antes de continuar veremos un archivo de “utilerías” al que yo más bien llamaría Constantes (las típicas constantes estáticas públicas de Java) en donde tenemos la definición de la tabla, los nombres de los campos y esas cosas.

En el archivo tenemos la creación de tablas y los nombres de los campos de cada tabla.

La clase Persona

Para hacer las cosas al modo de Java vamos a crear una clase Persona que vamos a estar instanciando para pasarla a través de los métodos en donde los datos se guardan.

No es obligatorio, pero es un buen paradigma. La clase queda así:

Tiene sus getters y setters; los setters no están siendo utilizados pero los getters si. Eso es más que nada por el encapsulamiento, cosa que no tiene lugar en este post.

Helper de SQLite

Debemos crear una clase que extienda de SQLiteOpenHelper. Vamos a sobrescribir el constructor y los métodos onCreate y onUpgrade.

El método onCreate es llamado cuando la base de datos es creada por primera vez. Aquí se deberían crear las tablas y llenar los datos iniciales si son necesarios. Lo único que hacemos es crear la tabla.

El método onUpgrade es cuando entregamos una nueva versión de la base de datos; en ese método modificamos las tablas o datos para realizar la actualización para los usuarios que ya tenían la base de datos instalada. Lo único que hacemos es eliminar la BD y volverla a crear.

Insertar persona en Agenda

Ahora veamos el primer paso de este crud: hacer un registro. Tenemos el layout en donde solicitamos:

  1. Identificador de persona
  2. Número de teléfono
  3. Nombre
Registrar contacto en Agenda de Android - SQLite

Registrar contacto en Agenda de Android – SQLite

Son 3 EditText y un Button. El layout queda así:

Al presionar el botón se debe generar un registro. Para hacerlo usamos ContentValues, le ponemos los valores obtenidos de los EditText; creamos una nueva instancia de la base de datos y hacemos el registro de la persona.

Dentro del código también existe el método existe, el cual recibe un identificador como cadena, hace una consulta y nos indica si un registro con determinado identificador ya está registrado.

Hacemos una simple validación con .isEmpty() para ver si los datos están vacíos y también llamamos al método existe para evitar registros con ids duplicados.; después obtenemos la base de datos en modo escritura y llamamos al método insert, el cual devuelve un tipo de dato long indicando el row id del nuevo registro.

Mostramos el número de registro en un Toast y con eso queda.

Consultar persona en Agenda

La interfaz para consultar pide el identificador y rellena los EditText con los datos traídos de la base de datos.

Si los datos existen, se rellenan los EditText. Si no, se muestra un Toast indicando que no existe.

Búsqueda de contacto en Agenda de Android - SQLite

Búsqueda de contacto en Agenda de Android – SQLite

El layout queda así:

Definimos lo que se ve en la imagen. El código Java para escuchar el click del botón, buscar el registro y poner los datos en el EditText queda así:

Nuevamente usamos a Toast para indicar los mensajes. Ahora llamamos al método query que devuelve un cursor (como en la función para comprobar si el identificador ya existía) y buscamos los datos en donde el id sea igual al proporcionado.

Por cierto, ahora no queremos la base de datos en modo escritura; solo lectura.

En caso de que haya datos obtenemos a los mismos con cursor.getString, pasándole el índice de la columna que, para no equivocarnos, obtenemos con getColumnIndex.

Listar personas de Agenda

Para terminar el ejercicio veamos la forma de listar los datos de la agenda. Esto es un poco más complejo porque involucra un RecyclerView y un adaptador para el mismo. además del diseño de un layout para cada fila y algunos otros métodos.

Listar contactos existentes en Agenda de Android - SQLite

Listar contactos existentes en Agenda de Android – SQLite

La lista debe mostrar el id, el número de teléfono y el nombre de la persona.

Adaptador del RecyclerView

Para empezar definimos el layout que tendrá el RecyclerView:

El RecyclerView mostrará filas. La fila individual queda así:

El adaptador que se encarga de poner los datos de la persona en la fila es el siguiente:

De modo general está obteniendo la fila y poniendo cada valor en su posición de la fila; es decir, cada valor en un EditText. Ese método será llamado por cada fila del RecyclerView.

También definimos el constructor en donde vamos a estar trabajando con una lista (List) de tipo Persona para saber a cuál persona dibujar en determino lugar.

Actividad que consulta datos y los pone en RecyclerView

Finalmente la actividad que obtiene la lista de personas y la pone al adaptador para el RecyclerView es la siguiente:

Iteramos el cursor y vamos agregando un elemento al ArrayList. El momento en donde la magia ocurre es cuando llamamos a setAdapter; los demás métodos que tienen que ver con el RecyclerView son para agregar algunos diseños.

Conclusión

Con este ejercicio reforzamos un poco más los métodos que Android ofrece para trabajar con bases de datos. Como lo dije al inicio, si quieres uno más avanzado mira el CRUD de Mascotas.

Todo el código que se necesita está en GitHub en el link que puse al inicio.

¿Encontraste lo que buscabas?

Si es así, suscríbete para que estés enterado de mis nuevos posts sobre programación e informática

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)

Si el contenido es de tu agrado, sígueme

parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Share via
A %d blogueros les gusta esto: