3
respostas

[Dúvida] Continua a exceção

import com.google.gson.Gson import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse.BodyHandlers import java.util.*

fun main() {

val leitura = Scanner(System.`in`)
println("Digite um código de jogo para buscar:")
val busca = leitura.nextLine()


val client: HttpClient = HttpClient.newHttpClient()
val request = HttpRequest.newBuilder()
    .uri(URI.create("https://www.cheapshark.com/api/1.0/games?id=$busca"))
    .build()
val response = client
    .send(request, BodyHandlers.ofString())

val json = response.body()
//println(json)


val gson = Gson()
val meuInfoJogo = gson.fromJson(json, InfoJogo::class.java)

// // try { // val meuJogo = Jogo(meuInfoJogo.info.title, meuInfoJogo.info.thumb) // println(meuJogo) // }catch (ex: NullPointerException){ // print("jogo inexistente. tente outro código!") // } var meuJogo: Jogo? = null

val resultado = runCatching {
    meuJogo = Jogo(
        meuInfoJogo.info.title,
        meuInfoJogo.info.thumb
    )

}

resultado.onFailure {
    println("Jogo inexistente. Tente outro código.")
}




resultado.onSuccess {
    println("Deseja inserir uma descrição personalizada? S/N:")
    val opcao = leitura.nextLine()

    if (opcao.equals("s", true)) {
        println("Insira a descrição personalizada do jogo:")
        val descricaoPersonalizada = leitura.nextLine()
        meuJogo?.descricao = descricaoPersonalizada
    } else {
        meuJogo?.descricao = meuJogo?.titulo
    }

    println(meuJogo)
}

resultado.onSuccess {
    println("Busca finalizada com sucesso!")
}

}

tratei a exceção como mostrado no video e ela continua aparecendo

"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1\lib\idea_rt.jar=57559:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\fabio\IdeaProjects\AluGames\target\classes;C:\Users\fabio.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk8\1.8.0\kotlin-stdlib-jdk8-1.8.0.jar;C:\Users\fabio.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\1.8.0\kotlin-stdlib-1.8.0.jar;C:\Users\fabio.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.8.0\kotlin-stdlib-common-1.8.0.jar;C:\Users\fabio.m2\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;C:\Users\fabio.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-jdk7\1.8.0\kotlin-stdlib-jdk7-1.8.0.jar;C:\Users\fabio.m2\repository\com\google\code\gson\gson\2.10.1\gson-2.10.1.jar MainKt Digite um código de jogo para buscar: 12 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:28) at 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) ... 6 more

Process finished with exit code 1

3 respostas

Oi Fábio, como vai?

Dei uma olhada no código da Main que você mandou e está tudo certinho. Essa exceção é de sintaxe do Json, então o erro pode estar nos arquivos InfoJogo ou InfoApiShark no momento da desserialização do Json para String, pois a exceção descreve que está esperando receber um objeto porém recebe um array.

Você poderia mandar aqui o código dessas duas classes ou mandar o link do projeto no github preu verificar e conseguir te ajudar melhor?

Oi, tudo bem e vc? Aqui estão os códigos das classes:

package br.com.tunino.alugames.modelo

data class InfoJogo(val info: InfoApiShark) {
    override fun toString(): String {
        return info.toString()
    }
}
package br.com.tunino.alugames.modelo

data class InfoApiShark(val title:String, val thumb:String)