🚀 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:

  1. Verificação de Consultas: O compilador valida suas instruções SQL antes mesmo do app rodar.
  2. Redução de Boilerplate: Mapeia automaticamente objetos Java (Entities) para tabelas do banco de dados.
  3. Integração Reativa: Suporta o retorno de dados observáveis (como LiveData ou Flow), 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:

  1. Entity (@Entity): Representa as tabelas do banco de dados (ex: Viagem, Gasto).
  2. DAO (@Dao): Contém os métodos para acessar os dados (Insert, Update, Delete, Query).
  3. 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 LocalDate de 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.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️