💾 Cap 13: Meus Jogos Favoritos (Room DB)
🎯 Objetivo da Aula: Ao final desta aula, você saberá criar um banco de dados interno no celular usando o Room. Você aprenderá a salvar informações de forma permanente (persistência), para que seus jogos favoritos não sumam quando o app fechar.
🏢 O Cenário Prático (Seu Desafio): Você tem muitos jogos e quer criar um catálogo pessoal. O desafio é criar o Vault Gamer: um banco de dados onde você pode salvar o nome do jogo, o console e a sua nota. Mesmo se você desligar o celular, sua lista continuará lá!
🧠 Fundamentos: A Teoria Traduzida
📖 Dicionário do Programador
- Entity (Entidade): É a “Tabela” do banco. Cada linha da tabela é um jogo. No Kotlin, é uma
data class. - DAO (Data Access Object): É o “Controle Remoto” do banco. É onde você cria os botões: “Salvar”, “Deletar” ou “Ver Tudo”.
- Primary Key (Chave Primária): É o CPF de cada registro. Cada jogo terá um número único para o banco não se confundir.
🎨 O Padrão Room
Organize seu código na pasta data/local/:
model/→ Coloque sua@Entityaqui.dao/→ Coloque sua@Daoaqui.
graph TD A[Seu App] --> B(DAO: O Gerente) B -->|Escreve/Lê| C[(Banco Room: O Arquivo)]
📖 Exemplo Passo a Passo: Criando o “Save Game”
-
Defina a Tabela (Entity):
@Entity(tableName = "jogos") data class JogoEntity( @PrimaryKey(autoGenerate = true) val id: Int = 0, val titulo: String, val plataforma: String ) -
Crie o Controle (DAO):
@Dao interface JogoDao { @Insert suspend fun adicionar(jogo: JogoEntity) @Query("SELECT * FROM jogos") suspend fun listarTodos(): List<JogoEntity> }
🛠️ Prática Obrigatória 1:
Crie uma Entity chamada PersonagemEntity. Ela deve ter um id (PrimaryKey), o nome e o level.
🛠️ Prática Obrigatória 2:
Crie o DAO para salvar heróis. Ele deve ter uma função para salvar e uma função para buscarPorNome.
🔑 Gabarito Passo a Passo:
// 1. A Tabela
@Entity(tableName = "personagens")
data class PersonagemEntity(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val nome: String,
val level: Int
)
// 2. O Controle
@Dao
interface PersonagemDao {
@Insert
suspend fun salvar(p: PersonagemEntity)
@Query("SELECT * FROM personagens WHERE nome = :nome")
suspend fun buscarPorNome(nome: String): PersonagemEntity
}📤 Instruções de Entrega (Microsoft Teams):
- Envie o código da sua Entity e do seu DAO.
- Nomeie como:
Gamer_SeuNome_Cap13.kt. - Submeta no canal de tarefas.