🚀 4 Persistência de Dados com Room
Para o nosso aplicativo BoaViagem, as interações com o usuário já estão prontas, mas os dados ainda são voláteis. Para armazenar informações de forma permanente, utilizaremos o Room Persistence Library, parte do Android Jetpack.
Por que migrar do SQLite puro para o Room?
Embora o Android suporte o SQLite nativamente, o uso direto de SQLiteOpenHelper exige muito código repetitivo (“boilerplate”) e não oferece verificações em tempo de compilação.
O Room oferece uma camada de abstração que permite:
- Verificação de Consultas: O compilador valida suas instruções SQL antes mesmo do app rodar.
- Redução de Boilerplate: Mapeia automaticamente objetos Java (Entities) para tabelas do banco de dados.
- Integração Reativa: Suporta o retorno de dados observáveis (como
LiveDataouFlow), permitindo que a interface se atualize automaticamente quando os dados mudam.
Arquitetura da Camada de Dados
Seguindo os Padrões de Engenharia Premium, nossa persistência será dividida em três componentes principais:
- Entity (@Entity): Representa as tabelas do banco de dados (ex:
Viagem,Gasto). - DAO (@Dao): Contém os métodos para acessar os dados (Insert, Update, Delete, Query).
- RoomDatabase: O ponto de entrada principal que conecta as entidades aos seus DAOs.
graph LR subgraph App ["Aplicação (UI)"] A[Activity/Fragment] end subgraph Domain ["Camada de Dados"] B[Repository] C[DAO] D["(SQLite/Room)"] end A --> B B --> C C --> D
IMPORTANT
Android 8.0+ Baseline: Com o uso do Room e Java 17, utilizaremos conversores de tipo (TypeConverters) para armazenar objetos modernos como
LocalDatede forma nativa no SQLite como inteiros (long), mantendo a precisão e facilidade de manipulação.
No próximo capítulo, definiremos nossas primeiras Entities e aprenderemos a configurar o banco de dados.