1
resposta

[Bug] 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 $

Depois de ter refatorado o codigo conforme a videoaula, esta dando esse erro apos digitar um codigo de jogo que nao existe. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO que faço? Segue em anexo arquivos Main.kt e ConsumoApi.kt

Main.kt

package br.com.alura.alugames.principal

import br.com.alura.alugames.modelo.Jogo
import br.com.alura.alugames.servicos.ConsumoApi
import java.util.*


fun main() {
    val leitura = Scanner(System.`in`)
    println("Digite um codigo de jogo para buscar:")
    val busca = leitura.nextLine()

    val buscaApi = ConsumoApi()
    val informacaoJogo = buscaApi.buscaJogo(busca)

    var meuJogo: Jogo? = null

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

    resultado.onFailure {
        println("Jogo inexistente. Tente outro id.")
    }

    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 para o jogo:")
            val descricaoPersonalizada = leitura.nextLine()
            meuJogo?.descricao = descricaoPersonalizada
            println("sua descrição: $descricaoPersonalizada")
            } else {
                meuJogo?.descricao = meuJogo?.titulo
                println("sem descrição")
            }
            println(meuJogo)
        }
        resultado.onSuccess {
            println("Busca finalizada com sucesso!")
        }
}

ConsumoApi.kt

package br.com.alura.alugames.servicos

import br.com.alura.alugames.modelo.InfoJogo
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

class ConsumoApi {
    fun buscaJogo(id: String): InfoJogo {
        val endereco = "https://www.cheapshark.com/api/1.0/games?id=$id"

        val client: HttpClient = HttpClient.newHttpClient()
        val request = HttpRequest.newBuilder()
            .uri(URI.create(endereco))
            .build()
        val response = client
            .send(request, BodyHandlers.ofString())

        val json = response.body()

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

        return meuInfoJogo
        }

    }
1 resposta

Olá, Silas! Tudo bem?

O erro que você está enfrentando ocorre porque o Gson está esperando um objeto JSON, mas está recebendo um array. Isso geralmente acontece quando a estrutura do JSON retornado pela API não corresponde à estrutura esperada pelo seu código.

Testando os trechos de código que você compartilhou não notei nenhuma inconsistência ou gerou nenhum erro ao rodar. Então, imagino que o erro esteja em outra parte do seu projeto, então peço que compartilhe comigo todo o seu projeto, assim poderei testá-lo para identificar a parte com problema.

Fico no aguardo e à disposição