Android AsyncTask

8 respostas
A

Gostaria de saber se ha alguma maneira de eu lançar exceção no método
doInBackGround:

protected Boolean doInBackground(String... args) {  
        List<ProdutoBean> listaProduto = null;  
        try {  
            if (Integer.parseInt((args[0])) == OPERACAO_ATUALIZA_PRODUTOS) {  
                listaProduto = new ChamarWs().getListaProduto();  
                /* chamar o método onProgressUpdate */  
                publishProgress("Inserindo produtos");  
                new ProdutoBi().inserirProduto(contextActivity, listaProduto);  
            }  
            return true;  
        } catch (ServidorException e) {  
/* OU SEJA, AQUI QUERO FAZER COM QUE O MÉTODO DE UM: "throw e";  
            return false;  
        } catch (InsereProdutoException e) {  
            return false;  
        }  
  
    }

Att.

8 Respostas

V
A

ja fiz isso, mas ele nao funciona…

e neste caso, é somente “throw e” e o método deve ter “throw ServidorException”.

Porém, o compilador nao aceita.

fabriciov

o que exatamente você quer fazer ? parar o aplicativo ? mostrar no log ?

A

quero simplesmente dar um “throw exception” no método doInBackground, após lançar esta exceção,
poderei trata-la na classe activity (classe que esta chamando o método doInBackground).

Att.

fabriciov

Não é possível fazer isso, a AT é uma Thread separada da Thread de UI, logo a exception ficará apenas no escopo desta thread.
O que você pode fazer é gerar uma callback para notificar a activity que uma exception foi disparada ou implementar uma UncaughtExceptionHandler (não lembro se android tem suporte a isso)

UncaughtExceptionHandler example: http://stackoverflow.com/questions/6546193/how-to-catch-an-exception-from-a-thread

A

fabriciov:
Não é possível fazer isso, a AT é uma Thread separada da Thread de UI, logo a exception ficará apenas no escopo desta thread.
O que você pode fazer é gerar uma callback para notificar a activity que uma exception foi disparada ou implementar uma UncaughtExceptionHandler (não lembro se android tem suporte a isso)

UncaughtExceptionHandler example: http://stackoverflow.com/questions/6546193/how-to-catch-an-exception-from-a-thread

entendo…

OK, vou pesquisar sobre o assunto…

no mais, agradeço a atenção.

Att,

Henrique.tenorio

Eu colocaria como retorno do método doInBackGround um Object, e nos blocos catch, eu atribuiria a referencia da MinhaException que foi capturada
e analisaria no método onPostExecute qual é minha referencia, é um Boolean, é null é uma Exception e tal.

Marky.Vasconcelos

@fabriciov

Android suporta UncaughtExceptionHandler sim, mas se for utilizar na Thread principal (log provavelmente) é necessario guardar a referencia do antigo e avisa-lo após tratar que irá causar o “The app has stoped.”

@Henrique.tenorio
Também acho essa a melhor solução, que inclusive é a que uso nas tasks com umas classes wrappers como:

private static class GrabResult {
        private final Result result;
        private Throwable error;

        GrabResult(Result result){ this.result = result; }
        GrabResult(Result result, Throwable error){ this.result = result; this.error = error; }
    }

E o tratamento é sempre no postExecute.

Criado 10 de julho de 2013
Ultima resposta 11 de jul. de 2013
Respostas 8
Participantes 5