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!
Olá, Gabriel! Tudo bem?
Pelo que você descreveu, parece que o erro está relacionado ao tipo de dado que o Gson está tentando desserializar. A exceção JsonSyntaxException indica que o Gson esperava um objeto JSON, mas encontrou um array JSON.
Isso pode acontecer se a resposta da API para o ID 174 for um array em vez de um objeto. Para resolver isso, você pode verificar o tipo de resposta antes de tentar desserializá-la. Aqui está uma sugestão de como lidar com isso:
Verifique o tipo de resposta: Antes de desserializar, veja se a resposta é um objeto ou um array.
Ajuste a desserialização: Se a resposta for um array, talvez você precise desserializar para uma lista de objetos.
Aqui está um exemplo de como você pode ajustar seu código:
val json = response.body()
println(json)
val gson = Gson()
try {
// Tenta desserializar como um objeto
val meuJogo = gson.fromJson(json, InfoJogo::class.java)
println(meuJogo)
} catch (e: JsonSyntaxException) {
// Se falhar, tenta desserializar como uma lista
val jogos: List<InfoJogo> = gson.fromJson(json, Array<InfoJogo>::class.java).toList()
jogos.forEach { jogo ->
println(jogo)
}
}
Essa abordagem tenta primeiro desserializar como um objeto. Se falhar, tenta como uma lista. Ajuste conforme necessário para o seu caso específico.
Espero ter ajudado e bons estudos!
Opa pessoal,
Levando em consideração o que o colega Armando escreveu acima e o que consta na aula, você, Gabriel, pode fazer sua validação da seguinte forma também:
package principal
import com.francelino.model.Jogo
import service.ConsumoApi
import java.util.*
fun main() {
println("Insira o código do filme")
val text = Scanner(System.`in`)
var codigo = text.nextLine()
val buscaApi = ConsumoApi()
var busca = runCatching {
val meuInfoJogo = buscaApi.retornaGson(codigo)
var meuJogo: Jogo? = null
var result = runCatching {
meuJogo = Jogo(
meuInfoJogo.info.title,
meuInfoJogo.info.thumb
)
}
result.onSuccess {
println("Deseja adicionar uma descrição?")
var resposta = text.nextLine()
if (resposta.equals("s", true)) {
println("Descrição: ")
var descricao = text.nextLine()
meuJogo?.descricao = descricao
}
if (!resposta.equals("s", true)) {
meuJogo?.descricao = meuJogo?.titulo
}
println(meuJogo)
}
result.onFailure {
println("Não existe filme com o código $codigo")
}
}
busca.onFailure {
println("Filme não está no formato padrão")
}
}