0

我有 Activity 调用调用提供程序的 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

4 回答 4

1

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

于 2013-11-04T14:17:47.447 回答
0

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

throw new RuntimeException(e);
于 2013-11-04T14:12:42.030 回答
0

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

  1. 在您的 mainActivity 上创建一个静态方法以显示消息。
  2. 创建一个接口来显示消息并让 mainActivity 实现它,然后将您的活动传递给提供者,类型为 YourInterface
于 2013-11-04T14:12:58.203 回答
0

你可以试试这样的

try
{
        ...
}
catch (Exception e)
{
     throw new YourOwnException(e);
}
于 2013-11-04T14:12:38.173 回答