1. Antes de comenzar
Requisitos previos
- Conocimientos básicos de SQL para leer y manipular una base de datos relacional
- Capacidad de usar Room en una app para Android para leer de una base de datos y escribir en ella
- Capacidad de usar DataStore para almacenar datos simples
- Capacidad de compilar interfaces de usuario moderadamente complejas con Compose
Qué compilarás
- Una app para Android que le solicita al usuario un aeropuerto de salida, busca en una base de datos que mostrará una lista prepropagada de vuelos que salen de ese aeropuerto, le permite guardar sus vuelos favoritos y actualiza la base de datos con Room
Requisitos
- Una computadora con Android Studio
2. Descripción general
Felicitaciones por completar la unidad 6. Comenzaste con una descripción general de bases de datos relacionales y el lenguaje de consulta estructurado (SQL), integraste una base de datos relacional en una app con Room y aprendiste sobre Preferences DataStore para mantener la configuración y el estado de la IU. Es hora de poner en práctica todo lo que aprendiste.
En este proyecto, compilarás la app de búsqueda de vuelos en la que los usuarios ingresan a un aeropuerto y pueden ver una lista de destinos usando ese aeropuerto como salida. Este proyecto te da la oportunidad de practicar tus habilidades con SQL, Room y DataStore, ya que te ofrece un conjunto de requisitos de la app que debes cumplir. En particular, necesitas que la app de búsqueda de vuelos cumpla con los siguientes requisitos:
- Proporciona un campo de texto para que el usuario ingrese el nombre del aeropuerto o el identificador de aeropuerto de la Asociación Internacional de Transporte Aéreo (IATA).
- Consulta la base de datos para proporcionar sugerencias de autocompletar a medida que el usuario escribe.
- Cuando el usuario elige una sugerencia, genera una lista de vuelos disponibles desde ese aeropuerto hacia otros aeropuertos de la base de datos, incluidos el identificador de la IATA y el nombre del aeropuerto.
- Permite que el usuario guarde sus rutas individuales favoritas.
- Cuando no se ingresa una búsqueda, muestra todas las rutas favoritas que seleccionó el usuario en una lista.
- Guarda el texto de búsqueda con Preferences DataStore. Cuando el usuario vuelve a abrir la app, el texto de búsqueda, si lo hay, debe completar previamente el campo de texto con los resultados adecuados de la base de datos.
Proporcionamos una base de datos prepropagada para este proyecto. Sin embargo, se espera que compiles la app desde cero según los requisitos; practica para el trabajo real que realizas como desarrollador de Android. Este proyecto también es una buena oportunidad para repasar o definir mejor tus habilidades de compilación de IU con Compose, ya que no tuviste que trabajar tanto con la IU desde la unidad 4.
3. Obtén la base de datos de los vuelos
Los datos de esta app provienen de la base de datos de vuelos. La base de datos de los vuelos contiene dos tablas, airport y favorite.
La tabla airport contiene el siguiente esquema.
Columna | Tipo de datos | Descripción |
id | INTEGER | Identificador único (clave primaria) |
código_IATA | VARCHAR | Código IATA de 3 letras |
nombre | VARCHAR | Nombre completo del aeropuerto |
pasajeros | INTEGER | Cantidad de pasajeros por año |
La tabla favorite contiene el siguiente esquema.
Columna | Tipo de datos | Descripción |
id | INTEGER | Identificador único (clave primaria) |
código_de_salida | VARCHAR | Código IATA para la salida |
destination_code | VARCHAR | Código IATA para el destino |
Puedes utilizar la tabla de aeropuertos para buscar aeropuertos y crear una lista de vuelos potenciales. Usa la tabla favorite, que inicialmente está vacía, para guardar los pares de destinos de salida y llegada que selecciona el usuario.
Descarga el archivo flight_search.db
de la rama project
del repositorio de GitHub de aspectos básicos de SQL aquí.
4. Planifica tu app
Planifica tu IU
Puedes diseñar tu app como quieras. Como guía, las siguientes imágenes y descripciones son un ejemplo de lo que un usuario puede esperar ver en la app.
Cuando el usuario abre la app por primera vez, ve una pantalla vacía con un campo de texto que le solicita un aeropuerto.
Cuando el usuario comienza a escribir, la app muestra una lista de sugerencias de autocompletar que coinciden con el nombre o el identificador del aeropuerto.
Cuando el usuario selecciona una sugerencia, la app muestra una lista de todos los vuelos posibles desde ese aeropuerto. Cada elemento incluye el identificador y los nombres de ambos aeropuertos, además de un botón para guardar el destino como favorito. No dudes en experimentar con el diseño siempre que transmita toda la información necesaria.
Cuando el usuario borra el contenido del cuadro de búsqueda o no ingresa una búsqueda, la app muestra una lista de los destinos favoritos guardados, si los hubiera.
Usa Room para integrar la base de datos de los vuelos
Para implementar las funciones anteriores, debes aprovechar tu conocimiento sobre SQL y Room. La base de datos ya consta de dos tablas, airport y favorite, y necesitas entidades para cada una. Selecciona los tipos de datos de Kotlin adecuados para acceder a los valores de cada tabla.
Además, debes considerar los siguientes requisitos cuando consultes la base de datos de vuelos y los datos persistentes:
- Busca sugerencias de autocompletar en la tabla de aeropuertos. Ten en cuenta que tal vez el usuario ya conozca el código de aeropuerto, por lo que deberás comparar su entrada con la columna
iata_code
, además de con la columnaname
, cuando se busque texto. Recuerda que puedes usar la palabra claveLIKE
para realizar búsquedas de texto. - Muestra los aeropuertos que se visitan con más frecuencia en orden descendente según la columna de pasajeros.
- Supón que cada aeropuerto tiene vuelos a todos los demás aeropuertos de la base de datos (a excepción de ellos mismos).
- Cuando no haya texto en el cuadro de búsqueda, muestra una lista de vuelos favoritos que indique la salida y el destino. Como la tabla de favoritos solo incluye columnas para los códigos de aeropuertos, no se espera que muestres los nombres de los aeropuertos.
- Realiza todas las consultas de la base de datos con las APIs de SQL y Room. Lo importante es NO cargar toda la base de datos en la memoria de una vez, sino recuperar solo los datos requeridos según sea necesario.
Conserva el estado del usuario con Preferences Datastore
Además de SQL y Room, también sabes cómo conservar los valores individuales, como la configuración de usuario. En el caso de la app de búsqueda de vuelos, debes almacenar la cadena de búsqueda del usuario en Preferences Datastore para que se propague cuando el usuario reinicie la app. Si el campo de texto está vacío cuando el usuario cierra la app, entonces se debe mostrar la lista de vuelos favoritos.
5. Compila la app de búsqueda de vuelos
Ahora que ya leíste todos los requisitos, es momento de compilar tu app. Aunque esta unidad se centra en la persistencia de datos, es importante seguir adquiriendo práctica acumulativa. Si bien viste capturas de pantalla de ejemplo de la app de búsqueda de vuelos en acción, este proyecto es tu oportunidad de personalizar tu app y destacarla.
Aunque estas tareas exactas no son conocidas, ya conoces todos los conceptos principales necesarios para crear este proyecto. Si no puedes avanzar o necesitas repasar, puedes consultar los codelabs anteriores.
La siguiente información podría resultarte útil mientras trabajas en tu proyecto:
- Cómo usar SQL para leer una base de datos y escribir en ella
- Cómo conservar datos con Room
- Cómo leer y actualizar datos con Room
- Cómo guardar tus preferencias de forma local con DataStore
Sobre todo, disfruta el proceso. El aprendizaje es un camino. Incluso si este proyecto es desafiante, es probable que aprendas algo nuevo y que, la próxima vez, te resulte fácil resolver los mismos problemas. Que te diviertas, y nos vemos en la próxima unidad.