🧩 Exercícios - Cap 14: Dados Pokemon: O Mundo Real
🎯 Antes de começar
No Cap 14 você usou @SerializedName para traduzir front_default → urlFoto, e nas Práticas Obrigatórias criou PokemonStatus (com ehLendario) e PokedexResponse (com List<Pokemon>). Depois de completar as duas Práticas, faça o exercício extra abaixo para mapear um objeto aninhado — exatamente como a PokeAPI real entrega a foto do Pokémon.
💪 Exercício Extra 1: Mapeando um Objeto Aninhado — sprites.front_default (20 min)
Objetivo: Praticar a criação de duas data class conectadas, para mapear um JSON onde um campo é, na verdade, outro objeto dentro do JSON principal.
Passos:
- Observe este JSON simplificado (assim como a PokeAPI real entrega):
{ "name": "pikachu", "id": 25, "sprites": { "front_default": "https://exemplo.com/pikachu.png" } } - Crie uma
data classseparada para o objetosprites:data class Sprites( @SerializedName("front_default") val urlFoto: String ) - Atualize a
data class Pokemonpara usarSpritesem vez deString:data class Pokemon( val name: String, val id: Int, val sprites: Sprites ) - Para acessar a foto no código, use
pokemon.sprites.urlFoto(nãopokemon.urlFoto).
✅ Resultado Esperado
- O GSON consegue ler o objeto
spritesdo JSON e criar automaticamente uma instância deSpritesdentro doPokemon. pokemon.sprites.urlFotoretorna"https://exemplo.com/pikachu.png".- A classe
Pokemonnão precisa de@SerializedNamepara o camposprites, pois o nome já é igual no JSON e no Kotlin (sprites=sprites).
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
Expected BEGIN_OBJECT but was STRING |
O campo sprites foi declarado como String em vez de Sprites |
Confirme val sprites: Sprites na classe Pokemon, e que Sprites é uma data class separada |
Unresolved reference: urlFoto ao acessar pokemon.urlFoto |
urlFoto está dentro de Sprites, não direto em Pokemon |
Acesse com pokemon.sprites.urlFoto |
sprites chega como null |
O nome da classe/campo não corresponde à chave do JSON ("sprites") |
Confirme que o nome do campo no Kotlin é exatamente sprites (minúsculo, igual ao JSON) |