Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何处理自定义AsyncTaskLoader中的错误?_Android_Loader_Asynctaskloader - Fatal编程技术网

Android 如何处理自定义AsyncTaskLoader中的错误?

Android 如何处理自定义AsyncTaskLoader中的错误?,android,loader,asynctaskloader,Android,Loader,Asynctaskloader,我正在扩展AsyncTaskLoader,稍后将通过LoaderManager在片段中使用它。是否有处理异步任务期间发生的错误的建议方法?我想弹出消息,要求用户取消或重试时,互联网连接错误发生 我现在能想到的唯一方法是让Loader在出错时返回null,或者将加载的对象包装到另一个具有状态代码的对象中。正如您所建议的,当返回包含有效负载(如果有)和状态代码的复合对象时,我看到了很好的结果。然后,承载AsyncTaskLoader的片段可以显示适当的信息错误。这种方法还有一个额外的优点,即它使用内

我正在扩展AsyncTaskLoader,稍后将通过LoaderManager在片段中使用它。是否有处理异步任务期间发生的错误的建议方法?我想弹出消息,要求用户取消或重试时,互联网连接错误发生


我现在能想到的唯一方法是让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
。相关阅读: