🧩 Exercícios - Cap 15: Meus Jogos Favoritos (Room DB)

📖 Ver Cap 15

🎯 Antes de começar

No Cap 15 você criou PersonagemEntity (a “Tabela”), PersonagemDao (com salvar e buscarPorNome) e AppDatabase (o “Armário”). Depois de completar as três Práticas, faça o exercício extra abaixo para completar o DAO com as ações de listar e remover — fechando o ciclo de um catálogo de verdade.


💪 Exercício Extra 1: Completando o DAO — Listar e Remover (20 min)

Objetivo: Adicionar @Query para listar todos os registros e @Delete para remover um registro, completando o “Controle Remoto” do banco.

Passos:

  1. No PersonagemDao, adicione o import:
    import androidx.room.Delete
    
  2. Adicione duas novas funções à interface PersonagemDao:
    @Query("SELECT * FROM personagens")
    suspend fun listarTodos(): List<PersonagemEntity>
    
    @Delete
    suspend fun remover(p: PersonagemEntity)
    
  3. Simule o fluxo completo (pode ser numa função de teste ou no ViewModel):
    dao.salvar(PersonagemEntity(nome = "Ash", level = 5))
    dao.salvar(PersonagemEntity(nome = "Misty", level = 8))
    
    val todos = dao.listarTodos() // deve retornar 2 itens
    
    val ash = dao.buscarPorNome("Ash")
    dao.remover(ash)
    
    val depois = dao.listarTodos() // deve retornar 1 item
    

✅ Resultado Esperado


🆘 Resolução de Problemas Comuns

Erro Causa Solução
Unresolved reference: Delete Faltou o import da anotação Adicione import androidx.room.Delete no topo do arquivo do DAO
remover(p) não apaga nada O objeto passado tem id = 0 (criado na mão), em vez do id real gerado pelo Room Busque o objeto existente com buscarPorNome(...) (que já vem com o id correto do banco) antes de chamar remover
listarTodos() retorna lista vazia mesmo após salvar As chamadas estão sendo feitas fora de uma corrotina, ou em ordem errada (listar antes de salvar) Garanta que salvar é chamado (e aguardado, por ser suspend) antes de listarTodos()

⬅️ Voltar para Exercícios