1
resposta

Tratamento de Erro

Bom dia, poderiam me ajudar referente a esse Erro, ja descobri o que esta causando, porem nao consegui resolver:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNa API alguns jogos estao com [] como na foto:

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

package org.example

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 o Codigo do jogo: ")
    val busca = leitura.nextLine()

    val endereco = "https://www.cheapshark.com/api/1.0/games?id="+busca

    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()
    println(json)

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

    var meuJogo:Jogo? = null

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

        println(meuJogo)
    }

    resultado.onFailure {
        println("Jogo Inexistente")
    }

   
    resultado.onSuccess {
        println("Deseja inserir uma Descricao personalizada? (S/N)")
        val opcao = leitura.nextLine()
        if (opcao.equals("S", true)) {
            println("Insira a Descricao personalizada para o Game:")
            val descricaoPersonalizada = leitura.nextLine()
            meuJogo?.descricao = descricaoPersonalizada
        } else {
            meuJogo?.descricao = meuJogo?.titulo
        }
        println(meuJogo)
    }


}

Poderiam me ajudar a tratar esse erro?

1 resposta

Olá Lucas, tudo bem?

Pelo que observei na sua dúvida, o problema está ocorrendo porque a resposta da API, em alguns casos, é um array vazio ([]) em vez de um objeto JSON. Isso causa um erro quando o Gson tenta converter a resposta para a classe InfoJogo, que espera um objeto JSON.

Para tratar esse erro, você pode verificar se a resposta é um array vazio antes de tentar fazer o parsing com Gson. Segue um exemplo de como você pode fazer isso:

package org.example

import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
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 o Codigo do jogo: ")
    val busca = leitura.nextLine()

    val endereco = "https://www.cheapshark.com/api/1.0/games?id=" + busca

    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()
    println(json)

    // Verifica se a resposta é um array vazio
    if (json.trim() == "[]") {
        println("Jogo Inexistente")
        return
    }

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

        var meuJogo: Jogo? = null

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

            println(meuJogo)
        }

        resultado.onFailure {
            println("Jogo Inexistente")
        }

        resultado.onSuccess {
            println("Deseja inserir uma Descricao personalizada? (S/N)")
            val opcao = leitura.nextLine()
            if (opcao.equals("S", true)) {
                println("Insira a Descricao personalizada para o Game:")
                val descricaoPersonalizada = leitura.nextLine()
                meuJogo?.descricao = descricaoPersonalizada
            } else {
                meuJogo?.descricao = meuJogo?.titulo
            }
            println(meuJogo)
        }
    } catch (e: JsonSyntaxException) {
        println("Erro ao processar a resposta da API")
    }
}

Neste código, antes de tentar fazer o parsing com Gson, verificamos se a resposta é um array vazio ([]). Se for, exibimos a mensagem "Jogo Inexistente" e encerramos a execução. Caso contrário, seguimos com o parsing e o restante da lógica.

Caso isso não resolva a sua situação, peço que compartilhe todo o seu projeto usando o GitHub ou Drive do Google.

Espero ter ajudado e bons estudos!

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