1
resposta

[Bug] Tratamento de Exceção

Precisamos revisar um problema grave, na época que foi gravada a aula, os id que não tinham nenhum jogo retornavam pelo menos algum Json, que implicava numa determinada exceção que era tratável com o que foi dado em aula, apenas colocando apenas a instancia da variável meuJogo dentro do try ou runCatching, porém o erro agora dá bem antes disso, pois deve ter havido alguma atualização com a API do CheapShark, conforme a print abaixo do Postman, ele não está mais retornando código 200 na pesquisa, mas código 404, ou seja, o código quebra antes de chegar nessa parte do try. A solução foi colocar todo o tratamento da variável response em diante dentro do encapsulamento da tentativa.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO problema se agravou na hora de refatorar o código, pois encapsulamos tudo dentro de uma classe, desde o HttpClient até o Gson, portanto a solução foi deixar essa instância toda - mesmo que fosse preciso apenas um pedaço - dentro do runCatching, abaixo o código que consegue tratar as exceções

package br.com.alura.alugames.principal

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

fun main() {

    val leitura = Scanner(System.`in`)
    println("Digite o ID do jogo que deseja buscar:")
    val busca = leitura.nextLine()

    var meuJogo: Jogo? = null

    val resultado = runCatching {

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

        meuJogo = Jogo(
            meuInfoJogo.info.title,
            meuInfoJogo.info.thumb)
    }

    resultado.onFailure {
        println("Erro ao buscar o jogo.")
    }

    resultado.onSuccess {

        println("Deseja inserir uma descrição personalizada? (s/n)")
        val resposta = leitura.nextLine()

        if (resposta.equals("s", true)) {
            println("Digite a descrição personalizada:")
            val descricaoPersonalizada = leitura.nextLine()
            meuJogo?.descricao = descricaoPersonalizada
            println("Descrição inserida: $descricaoPersonalizada")
        } else {
            meuJogo?.descricao = meuJogo?.titulo

        }

        println(meuJogo)
    }

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

Olá, Gabriel! Tudo bem?

Agradeço por compartilhar o seu feedback acerca do conteúdo passado em aula, cometários assim são importantes para continuamos entregando materiais com qualidade.

Com isso, gostaria de informa que repassei para o pessoal responsável pelo material do curso o seu feedback, então, eles analisaram e para ver se será necessária alguma atualização.

No mais, bons estudos!