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

Problema no onFailure

No exemplo citado na aula o jogo 174 (inexistente) retornava uma thumb pelo menos, agora nessa API esta retornando um array vazio [] gerando erro no tratamento do "resultado.onFailure" , tentei por conta propria resolver esse problema e gerar a mensagem de erro porem todas as tentativas de tratar o errou nao deu certo, tentei "ex: JsonSyntaxException" e "ex: IllegalStateException" sei que nao importa mas fiquei curioso pra saber o que fazer nesses casos, segue o erro abaixo

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:397) at com.google.gson.Gson.fromJson(Gson.java:1227) at com.google.gson.Gson.fromJson(Gson.java:1137) at com.google.gson.Gson.fromJson(Gson.java:1047) at com.google.gson.Gson.fromJson(Gson.java:982) at MainKt.main(Main.kt:36) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:393) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:386) ... 5 more

2 respostas

edit.

solução!

Olá Danilo, como vai? Espero que esteja bem!

Isso ocorre porque o seu código está esperando um objeto JSON, mas está recebendo um array.

Uma possível solução para o seu problema seria verificar se o retorno da API é um array ou um objeto antes de tentar parseá-lo. Você pode fazer isso usando a biblioteca Gson que você já está utilizando.

Aqui está um exemplo de como você pode fazer isso:

val elementoJson = JsonParser().parse(jsonString)

if (elementoJson.isJsonObject) {
    // Trate o elementoJson como JsonObject
    val meuJogo = Gson().fromJson(elementoJson, Jogo::class.java)
} else if (elementoJson.isJsonArray) {
    // Trate o elementoJson como JsonArray
    println("O jogo não existe")
}

Nesse exemplo, jsonString é a string JSON que você recebeu da API. O método parse do JsonParser retorna um JsonElement, que pode ser um JsonObject, um JsonArray, um JsonPrimitive ou um JsonNull. Você pode então verificar se o JsonElement é um objeto ou um array usando os métodos isJsonObject e isJsonArray, respectivamente.

Espero ter ajudado!

Caso tenha dúvidas, fico á disposição.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software