Eu entendi que temos que passar pelo info antes de chegar nos valores "title" e "thumb", porém não entendi como passando no construtor o atributo info do tipo jogo faz tudo acontecer. Se alguém puder me explicar agradeço.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Eu entendi que temos que passar pelo info antes de chegar nos valores "title" e "thumb", porém não entendi como passando no construtor o atributo info do tipo jogo faz tudo acontecer. Se alguém puder me explicar agradeço.
Oi Victor! Tudo bem?
Sei bem que o conceito pode ser um pouco confuso no início, mas vou tentar explicar de forma simples. Quando você está lidando com JSON e a biblioteca Gson, a desserialização é o processo de converter dados JSON em objetos Kotlin.
No seu caso, o JSON que você está recebendo tem uma estrutura onde as informações do jogo estão aninhadas em uma chave chamada info. Para acessar os valores title e thumb, você precisa primeiro passar por info, que é onde entra a classe InfoJogo.
Vamos ver um exemplo prático para esclarecer:
JSON de Exemplo:
{
"info": {
"title": "Nome do Jogo",
"thumb": "URL da Imagem"
}
}
Classe Jogo: Esta classe representa os dados que você realmente quer extrair, ou seja, title e thumb.
class Jogo(@SerializedName("title") val titulo: String,
@SerializedName("thumb") val capa: String)
Classe InfoJogo: Esta classe é necessária porque o JSON que você recebe tem uma estrutura onde title e thumb estão dentro de info. Assim, InfoJogo atua como um contêiner para o objeto Jogo.
class InfoJogo(val info: Jogo)
Ao criar uma instância de InfoJogo no seu código, você está dizendo ao Gson para mapear a estrutura JSON para um objeto Kotlin que contém outro objeto Kotlin (Jogo). Isso é necessário porque o JSON tem essa camada extra de info.
Então, quando você usa gson.fromJson(json, InfoJogo::class.java), o Gson entende que precisa primeiro criar um objeto InfoJogo, que por sua vez contém um objeto Jogo com os dados title e thumb.
Espero ter ajudado e bons estudos!