Android 如何处理自定义AsyncTaskLoader中的错误?
我正在扩展AsyncTaskLoader,稍后将通过LoaderManager在片段中使用它。是否有处理异步任务期间发生的错误的建议方法?我想弹出消息,要求用户取消或重试时,互联网连接错误发生Android 如何处理自定义AsyncTaskLoader中的错误?,android,loader,asynctaskloader,Android,Loader,Asynctaskloader,我正在扩展AsyncTaskLoader,稍后将通过LoaderManager在片段中使用它。是否有处理异步任务期间发生的错误的建议方法?我想弹出消息,要求用户取消或重试时,互联网连接错误发生 我现在能想到的唯一方法是让Loader在出错时返回null,或者将加载的对象包装到另一个具有状态代码的对象中。正如您所建议的,当返回包含有效负载(如果有)和状态代码的复合对象时,我看到了很好的结果。然后,承载AsyncTaskLoader的片段可以显示适当的信息错误。这种方法还有一个额外的优点,即它使用内
我现在能想到的唯一方法是让Loader在出错时返回null,或者将加载的对象包装到另一个具有状态代码的对象中。正如您所建议的,当返回包含有效负载(如果有)和状态代码的复合对象时,我看到了很好的结果。然后,承载
AsyncTaskLoader
的片段可以显示适当的信息错误。这种方法还有一个额外的优点,即它使用内置的加载程序生命周期
另一个选项是注册一个侦听器,当出现错误时,AsyncTaskLoader
将通知该侦听器。有一个将错误侦听器用于加载程序的示例。我们在上一个项目中所做的工作:创建一个包装器,其中包含一个泛型和一个例外,如下所示:
public class AsyncTaskResult<T> {
private final T result;
private final Exception error;
//getter & setter
}
公共类AsyncTaskResult{
私人最终测试结果;
私有最终异常错误;
//吸气剂和塞特
}
捕获doInBackground(…)
中的所有异常,并将它们打包到结果包装器中(如果没有错误,则打包到结果包装器中)。在UI中,检查包装器是否为异常,然后显示相应的错误消息,否则用结果填充字段
对于我们来说,定义异常的独特类型也是一种很好的做法(例如,存在可恢复错误的异常,您只显示一个对话框或一个应用程序故障,您需要将用户踢到主菜单),并且只抛出这些类型的异常(在异步任务中捕获特定的异常时),因此,您不必担心数百种不同的异常,也不必抽象错误处理。您还可以为字符串键提供正确的I18n错误消息,这样您只需编写e.getMessage()
您有过这样的经历吗?我现在也遇到了同样的问题,因为我不再需要检查AsyncTask的doInBackground
的返回值。很好的实践,sameI做过这样的操作:MyLoader Extendes AsyncTaskLoader
您也可以使用捆绑包并有一个错误密钥,如果您的所有数据都实现了Parcelable
。相关阅读: