Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Não tratamento de exceção

Acho que não saquei muito bem como funciona esse tratamento de exceções no Kotlin. Fiz as duas funções, para caso positivo e negativo. Mas quando acontece a hipótese ruim, acabão não ocorrendo o tratamento da exceção. Vou manda foto aqui para que consigam ver o problema

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

Inclusive, o console fala do erro na linha 31, aonde começa o uso da função no meu código. Alguém pode me esclarecer esse ponto?

2 respostas
solução!

Olá Hugo! Tudo bem?

A exceção JsonSyntaxException que está sendo lançada indica que o Gson esperava um objeto JSON (BEGIN_OBJECT), mas encontrou um array JSON (BEGIN_ARRAY) no início do documento.

Isso geralmente ocorre quando a estrutura do JSON que você está tentando deserializar não corresponde à estrutura esperada pela classe em que você está tentando deserializar os dados.

Aqui estão algumas sugestões para resolver esse problema:

  1. Verifique a Estrutura do JSON: Certifique-se de que o JSON que você está recebendo é o que sua aplicação espera. Se você espera um objeto, o JSON deve começar com { e terminar com }. Se você espera um array, ele deve começar com [ e terminar com ].

  2. Ajuste o Código de Deserialização: Se o JSON é um array, você deve modificar seu código para deserializar um array em vez de um objeto. Por exemplo, se você está tentando deserializar para uma classe Game, mas o JSON é um array, você deveria usar:

    val gson = Gson()
    val gamesArray = gson.fromJson(jsonString, Array<Game>::class.java)
    

    Isso irá deserializar o JSON como um array de Game.

  3. Tratamento de Exceções: Para lidar com possíveis erros de deserialização, você pode envolver seu código de deserialização em um bloco try-catch para capturar a JsonSyntaxException e tratar adequadamente, por exemplo, informando ao usuário que o formato dos dados está incorreto ou tentando uma recuperação alternativa.

  4. Validação de Dados: Antes de deserializar, você pode validar se o JSON está no formato esperado. Existem várias bibliotecas em Kotlin/Java que podem ajudar com isso, como o json-schema-validator.

Aqui está um exemplo de como você poderia implementar o tratamento de exceções:

try {
    val gson = Gson()
    val game = gson.fromJson(jsonString, Game::class.java)
} catch (e: JsonSyntaxException) {
    e.printStackTrace()
    // Tratar o erro, como logar ou mostrar uma mensagem ao usuário
}

Essas são algumas sugestões genéricas acerca da sua pergunta, já que não tenho acesso ao seu código, não consigo informar o porquê o erro não está sendo tratado ou como, diretamente, resolver isso.

Espero que essas sugestões lhe ajudem.

Bons estudos!

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

Olá Armano, Tudo bem.

Então, era isso mesmo. A api tava me retornando um tipo diferente, no caso [] ao invés de uma String. No chatGPT me foi recomendado usar um adapter. Foi o que eu fiz e parece que deu bom por aqui kkkkk.

Mas obrigado pela resposta, me ajudou bastante.