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.
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!