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")
}
}