Meu código tá igual ao mostrado na aula mas o resultado do tratamento das exceções tá diferente. Aparentemente tá retornando um erro de JSON pq ele espera um objeto mas retorna um array vazio. Não sei como consertar isso, e achei estranho que no código da professora não aconteceu isso :( Tem alguma solução??
Output do erro:
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 br.com.alura.alugames.servicos.ConsumoApi.buscaJogo(ConsumoApi.kt:25)
at br.com.alura.alugames.principal.MainKt.main(Main.kt:28)
at br.com.alura.alugames.principal.MainKt.main(Main.kt)
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)
... 7 more
Tratamento da exceção:
val buscaApi = ConsumoApi()
val informacaoJogo = buscaApi.buscaJogo(busca)
// inicializar variável meuJogo em escopo global
var meuJogo: Jogo? = null
val resultado = runCatching {
// reatribuir valor de `meuJogo`
meuJogo = Jogo(informacaoJogo.info.title, informacaoJogo.info.thumb)
}
// ESSE PRINT NÃO APARECE MESMO QUANDO FALHA ===============================================================
resultado.onFailure {
println("br.com.alura.alugames.modelo.Jogo inexistente. Tente outro ID.")
}
resultado.onSuccess {
println("Deseja inserir descrição personalizada? [S/N] ")
val opcao = leitura.nextLine()
if (opcao.equals("s", true)) {
println("Insira a descrição personalizada para o jogo: ")
val descricaoPersonalizada = leitura.nextLine()
meuJogo?.descricao = descricaoPersonalizada
} else {
meuJogo?.descricao = meuJogo?.titulo
}
println(meuJogo)
}
resultado.onSuccess { println("Busca finalizada com sucesso.") }