如何重新抛出被捕异常

时间:2013-11-04 14:03:55

标签: java android exception exception-handling

我的情况是Activity调用调用provider的Manager类。

活动 - > Manager(使用asyncTask的方法) - >提供商

在提供者上我抛出自定义异常

try {
    // here is code that may be exception
} catch (LoadingException e) {
    DataNotAvailableException ex = new DataNotAvailableException();
    ex.initCause(e);
    throw ex;
}

我在Manager类

上处理此异常
try {
    //calling provider and catching exception
} catch (DataNotAvailableException e) {
   //TODO rethrow exception to activity
}

但主要是我不能将异常抛回到处理UI的Activity的问题。在那里,我想向用户显示消息(对话框),该连接不可用。

如果我试图重新抛出异常,它会给我错误(说环绕try / catch块)。

我应该如何将捕获的异常发送回活动?

4 个答案:

答案 0 :(得分:1)

如果你使用AsyncTask而不是常规线程,你可以简单地构造你的逻辑,如果doInBackground方法返回一些零/零值,你的onPostExecute就会简单向用户显示所需的错误对话框。如果您无法使用AsyncTask,那么您可以在UI线程中创建Handler,然后当您捕获异常时,通过处理程序向您的UI线程发送消息,然后您可以在其中显示你的错误对话框。

答案 1 :(得分:0)

您可以尝试这样的事情

try
{
        ...
}
catch (Exception e)
{
     throw new YourOwnException(e);
}

答案 2 :(得分:0)

抛出一个新的RuntimeException,并将捕获的异常作为参数。在编译时不检查RuntimeExceptions。

throw new RuntimeException(e);

答案 3 :(得分:0)

当您通过两种方式捕获异常时,您可以在主活动上执行某些方法来显示消息。

  1. 在mainActivity上创建一个静态方法以显示消息。
  2. 创建一个显示消息的界面,然后让mainActivity实现 它,然后将您的活动传递给提供者,类型为YourInterface