🧩 Exercícios - Cap 15: Meus Jogos Favoritos (Room DB)
🎯 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:
- No
PersonagemDao, adicione o import:import androidx.room.Delete - Adicione duas novas funções à interface
PersonagemDao:@Query("SELECT * FROM personagens") suspend fun listarTodos(): List<PersonagemEntity> @Delete suspend fun remover(p: PersonagemEntity) - 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
listarTodos()retorna umaList<PersonagemEntity>com todos os registros salvos na tabelapersonagens.remover(ash)apaga apenas o personagem cujoidcorresponde ao objetoash(vindo debuscarPorNome, com oidreal gerado pelo Room).- Após a remoção,
listarTodos()retorna uma lista com um item a menos.
🆘 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() |