Conexión y manejo de transferencias en Room Database
Clase 29 de 32 • Curso de Patrones de Diseño en Android
Resumen
¿Cómo se utiliza Room para gestionar datos en una aplicación?
Room es una librería de base de datos de persistencia para aplicaciones que facilita la interacción con la base de datos SQLite de Android. Al utilizar anotaciones y objetos de entidad, Room ofrece una API limpia que permite realizar operaciones CRUD sin complicaciones. En este contenido, abordaremos el uso de Room para guardar y recuperar datos, específicamente en el contexto de transferencias.
¿Cómo guardar transferencias con Room?
Para guardar transferencias en una base de datos usando Room, debemos seguir un proceso estructurado:
-
Definición de la Entidad: Primero, se define una entidad que representa la tabla en la base de datos. En este caso, usamos
TransferEntity
, que almacena información comotransactionDate
,amount
, y datos del usuario. -
Creación del Objeto Database: Utilizamos una clase anotada con
@Database
para definir la base de datos. Esta contiene referencias a las entidades que forman parte del modelo, asegurando que Room reconozca las tablas a utilizar.
@Database(entities = [TransferEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun transferDao(): TransferDao
}
- Almacenamiento de la Transferencia: Al tener una instancia del objeto de la base de datos, realizamos la operación de guardar una transferencia. Creamos un
TransferEntity
con los valores requeridos y utilizamos el método definido en el DAO para insertarlo.
val newTransfer = TransferEntity(
userIdFrom = "PlatziUser",
userIdTo = "ReceiverId",
transactionDate = "12-12-2020",
amount = 50000
)
transferDao.insertTransfer(newTransfer)
- Manejo de Transacciones: Room permite el uso de transacciones para asegurar que se realicen operaciones complejas de manera segura, lo cual es crucial para mantener la integridad de los datos.
¿Cómo leer datos y mostrarlos?
Leer datos almacenados previamente es igual de importante que guardarlos. Aquí se explica cómo hacerlo integrando otras funcionalidades:
- Consulta de Transferencias: Para recuperar transferencias, se crean métodos en el DAO que devuelven listas de entidades según algunos criterios.
@Dao
interface TransferDao {
@Query("SELECT * FROM TransferEntity WHERE userIdFrom = :userId")
fun getTransfersForUser(userId: String): List<TransferEntity>
}
- Mostrar en Pantalla: Las transferencias recuperadas se pueden mostrar en pantalla. Un ejemplo sencillo es concatenar los detalles en una sola cadena y mostrarlo mediante un Toast.
val transfers = transferDao.getTransfersForUser("PlatziUser")
val displayString = transfers.joinToString("\n") { "${it.transactionDate}: ${it.amount}" }
Toast.makeText(context, displayString, Toast.LENGTH_LONG).show()
- Uso de Handlers para Tareas Asíncronas: Al utilizar
Handler
yRunnable
, podemos ejecutar tareas después de cierto tiempo, como cargar y mostrar datos varios segundos después de realizar una transferencia.
Handler().postDelayed({
// Actualizamos la interfaz con los nuevos datos
}, 3000)
¿Qué ocurre si encontramos un error?
Trabajando con Room, es fundamental manejar los posibles errores. Un error común podría ser una configuración incorrecta de las entidades. Asegúrate de que la entidad está correctamente anotada y que las versiones de la base de datos están bien definidas.
Al final, la clave está en los fundamentos sólidos de cómo funciona Room con las entidades, DAO, y el objeto Database. Room transforma la interacción con bases de datos en una tarea más sencilla y eficiente, permitiendo concentrarse en la lógica de negocio. Es emocionante ver cómo pequeños cambios mejoran la eficiencia de una aplicación completa y por eso, ¡sigue explorando y mejorando tus aplicaciones!