Android AsyncTask

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.

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.

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

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.

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

[quote=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[/quote]

entendo…

OK, vou pesquisar sobre o assunto…

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

Att,

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.

@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.