1
resposta

TRATAMENTO DE EXCESSÕES COM RUNCATCHING

Tenho enfrentado um problema crônico sempre que lido com tratamento de excessões no Try/catch e agora vi que o mesmo acontece com runcatching. Sempre que crio o bloco de código para tratar excessões o bloco de código que busca as informações funciona perfeitamente, mas eu nunca consigo fazer a leitura do tratamento da excessão, ou catch.

Na aula eu ainda consegui ler a excessão, mas quando organizei o projeto conforme a aula, acusa um erro. Quando a leitura da certo e eu consegui capturar a excessão, a linha "val meuInfoJogo = gson.fromJson(json, InfoJogo::class.java)", estava dentro de runcatching, quando eu organizei, ele começou a apresentar o erro? Insira aqui a descrição dessa imagem para ajudar na acessibilidade Como faço para que tratamento da excessão seja visto?

1 resposta

Oi Brayan!

Entendi o seu problema. Parece que você está tendo dificuldades em capturar e tratar exceções corretamente ao usar o runCatching em Kotlin, especialmente quando organiza o código. Isso pode ser um pouco confuso às vezes, mas vamos tentar esclarecer.

O runCatching é uma maneira interessante de tratar exceções, pois ele retorna um Resultado que pode ser manipulado diretamente. O erro que você está encontrando ao tentar ler a exceção pode estar relacionado à forma como você está acessando o valor ou a exceção do resultado.

Quando você usa o runCatching, ele executa o bloco de código e encapsula o resultado em um Resultado. Esse Resultado pode ser Success ou Failure, dependendo se ocorreu uma exceção ou não.

Aqui está um exemplo básico de como você deve usar o runCatching para capturar uma exceção e tratar corretamente:

val resultado = runCatching {
    // Código que pode lançar uma exceção, por exemplo:
    val meuInfoJogo = gson.fromJson(json, InfoJogo::class.java)
}

// Verifique se a execução foi bem-sucedida ou se houve uma falha
resultado.onSuccess { infoJogo ->
    // Se a execução foi bem-sucedida, trate aqui
    println("Informações do jogo: $infoJogo")
}.onFailure { exception ->
    // Se houve uma falha, trate a exceção aqui
    println("Erro ao processar o JSON: ${exception.message}")
}
  • runCatching: Tenta executar o bloco de código que pode gerar exceções. Ele captura qualquer erro e o encapsula como Failure se ocorrer uma exceção.
  • onSuccess: Se o código dentro do runCatching for executado sem erros, a execução segue para essa parte, onde você pode acessar o valor retornado.
  • onFailure: Se ocorrer um erro dentro do runCatching, a exceção será capturada e você pode acessar a exceção através do exception no onFailure.

Possíveis causas do seu erro:

  1. A exceção não está sendo tratada corretamente: Se você está tentando acessar o catch diretamente, é possível que a exceção não esteja sendo lançada de forma que o Kotlin capture corretamente. Ao usar o runCatching, a exceção é encapsulada no Result, e você precisa acessá-la através de onFailure.

  2. Problema na organização do código: Se o bloco que lida com o gson.fromJson está dentro do runCatching, mas fora do bloco de exceção, isso pode interferir no fluxo. Certifique-se de que o código que pode gerar exceção esteja de fato dentro do bloco runCatching, e que a verificação da falha seja feita com onFailure.

  3. Tratamento de exceção específico: Se você precisa capturar exceções mais específicas, pode ser interessante usar um try/catch convencional dentro do bloco runCatching, ou verificar o tipo de exceção lançada dentro de onFailure:

val resultado = runCatching {
    // Tente realizar a operação
    gson.fromJson(json, InfoJogo::class.java)
}

resultado.onFailure { exception ->
    when (exception) {
        is JsonSyntaxException -> {
            println("Erro de sintaxe JSON: ${exception.message}")
        }
        else -> {
            println("Erro desconhecido: ${exception.message}")
        }
    }
}

Se você ainda estiver com dificuldades ou o erro persistir após essas alterações, me avise que podemos tentar revisar mais detalhadamente!