📄 Cap 12: Dados Pokemon: O Mundo Real

🎯 Objetivo da Aula: Ao final desta aula, você será capaz de ler um arquivo JSON complexo e transformá-lo em código Kotlin automaticamente usando a biblioteca GSON. Você aprenderá a lidar com nomes de variáveis que são diferentes no servidor e no seu app.


🏢 O Cenário Prático (Seu Desafio): A PokeAPI manda muitos dados. Se você pedir o Pikachu, ela manda um texto gigante. Mas o seu app só quer o nome e a foto. Além disso, no servidor o nome da foto é front_default, mas no seu app você quer chamar de fotoDoPokemon. Seu desafio é fazer essa “tradução” perfeita.


🧠 Fundamentos: A Teoria Traduzida

📖 Dicionário do Programador

  • JSON: É um texto organizado por chaves e valores. { "nome": "Pikachu" }.
  • GSON: É o tradutor. Ele lê o JSON e preenche as suas variáveis automaticamente.
  • SerializedName: É um “apelido”. Você diz: “Quando ler ‘front_default’ no JSON, guarde na minha variável ‘foto’“.

🎨 Padrão de Nomenclatura

Mantenha seus modelos na pasta data/model/. Use nomes que terminem em Response para dados que vêm da internet. Ex: PokemonResponse.kt.

graph TD
    A[JSON: front_default] --> B{GSON + SerializedName}
    B --> C[Kotlin: urlFoto]

📖 Exemplo Passo a Passo: Mapeando a Foto

  1. Crie a classe de dados.
  2. Use a etiqueta @SerializedName em cima da variável.
package br.com.curso.pokedex.data.model
 
import com.google.gson.annotations.SerializedName
 
data class Pokemon(
    val name: String,
    val id: Int,
    // Traduzindo o nome estranho da API para um nome bonito no Kotlin
    @SerializedName("front_default") val urlFoto: String
)

🛠️ Prática Obrigatória 1: Crie a data class para o JSON abaixo. Lembre de usar camelCase no Kotlin para o campo is_legendary:

{
  "name": "Mewtwo",
  "is_legendary": true
}

🛠️ Prática Obrigatória 2: A PokeAPI retorna uma lista de Pokémons dentro de uma chave chamada results. Crie a classe PokedexResponse que tenha uma List<Pokemon>.


🔑 Gabarito Passo a Passo:

Exercício 1:

data class PokemonStatus(
    val name: String,
    @SerializedName("is_legendary") val ehLendario: Boolean
)

Exercício 2:

data class PokedexResponse(
    val results: List<Pokemon>
)

📤 Instruções de Entrega (Microsoft Teams):

  1. Envie o código das suas classes de dados.
  2. Nomeie como: Gamer_SeuNome_Cap12.kt.
  3. Submeta no canal de tarefas.

Capitulo Anterior | Proximo Capitulo