2
respostas

Meu código está exatamente igual ao da aula mas o erro é diferente

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

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:

  1. Verifique o tipo de resposta: Antes de desserializar, veja se a resposta é um objeto ou um array.

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

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

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


}