🧩 Exercícios - Cap 14: Dados Pokemon: O Mundo Real

📖 Ver Cap 14

🎯 Antes de começar

No Cap 14 você usou @SerializedName para traduzir front_defaulturlFoto, 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:

  1. Observe este JSON simplificado (assim como a PokeAPI real entrega):
    {
      "name": "pikachu",
      "id": 25,
      "sprites": {
        "front_default": "https://exemplo.com/pikachu.png"
      }
    }
    
  2. Crie uma data class separada para o objeto sprites:
    data class Sprites(
        @SerializedName("front_default") val urlFoto: String
    )
    
  3. Atualize a data class Pokemon para usar Sprites em vez de String:
    data class Pokemon(
        val name: String,
        val id: Int,
        val sprites: Sprites
    )
    
  4. Para acessar a foto no código, use pokemon.sprites.urlFoto (não pokemon.urlFoto).

✅ Resultado Esperado


🆘 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)

⬅️ Voltar para Exercícios