2014-01-24 3 views
0

Я создал универсальный класс AsyncTask, так что я могу поймать все исключения, брошенные когда task метод выполняется:Имея общий AsyncTask обрабатывать любые исключения

public abstract class Poc<ParamType, ReturnType> 
    extends AsyncTask<ParamType, String, ReturnType> { 

    abstract ReturnType task(ParamType... param); 

    @Override 
    protected ReturnType doInBackground(ParamType... param) { 
     try { 
      return task(param); 
     } catch (Exception e) { 
      // Make some Toast display the exception. 
     } 
     return null; 
    } 

} 

Я пытаюсь реализовать выше класс, делая некоторые вещи, как :

public class Use { 

    public static void runIt() { 
     new Poc<String, Boolean>() { 
      @Override 
      Boolean task(String... param) { 
       return SomeObject.someMethodThatCanThrowAnException(param); 
      } 
     }.execute("Some String"); 
    } 

} 

Однако, он продолжает жаловаться на то, что я хочу добавить заявления try/catch. Даже когда я знаю, что task будет вызываться только от doInBackground, который его обертывает.

Могу ли я как-то подавить это? Или что такое правильный подход, не добавляя try/catch к каждому классу, который подклассы Poc?

+0

Вы прочитали ошибку? – SLaks

ответ

2

Как компилятор пытается рассказать вам, вам нужно объявить свою функцию как возможность бросить вещи, используя throws Exception.

В этом случае вы хотели бы, чтобы абстрактный метод мог быть брошен.

+0

Я пробовал несколько вещей, включая добавление «throws Exception» в абстрактное определение в Poc. Такая же ошибка :-( –

+0

** Что говорит об ошибке **? Любой метод, который может выставить проверенное исключение, должен объявить его ключевым словом 'throws'. Это также включает переопределения. – SLaks

+0

Я сосать. Я добавлял его в определение метода вместо объявления. Ожидание отметки таймера, чтобы я мог принять ваш ответ. –

Смежные вопросы