📄 Cap 14: 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

🎨 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"]

📦 Dependência Gradle

A anotação @SerializedName vem da biblioteca GSON. Se você já adicionou converter-gson no cap_13, o GSON já está disponível (ele vem incluso). Caso contrário, adicione no build.gradle (Module: app):

implementation 'com.google.code.gson:gson:2.10.1'

📖 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_Cap14.kt.
  3. Submeta no canal de tarefas.

⬅️ Voltar para a Home