📄 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
- 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"]
📦 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
- Crie a classe de dados.
- Use a etiqueta
@SerializedNameem 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):
- Envie o código das suas classes de dados.
- Nomeie como:
Gamer_SeuNome_Cap14.kt. - Submeta no canal de tarefas.