Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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 从internet检索数据并在列表视图中显示的正确工作流_Android_Service_Android Asynctask - Fatal编程技术网

Android 从internet检索数据并在列表视图中显示的正确工作流

Android 从internet检索数据并在列表视图中显示的正确工作流,android,service,android-asynctask,Android,Service,Android Asynctask,对我来说,很难理解下载json数据并在ListView中显示它们的正确工作流。 目前,我正在使用AsyncTask下载和解析使用ArrayAdapter显示的数据。问题是AsyncTask无法生存到活动重新启动 所以我想知道服务是否是更好的解决方案,但如何将数据传递到ArrayAdapter?我是否应该始终使用数据库作为中间层来存储和检索数据 那么哪一个更好呢?使用db在保留片段或服务中执行异步任务 谢谢最简单的解决方案是在onRetainonConfiguration实例中返回当前的Async

对我来说,很难理解下载json数据并在ListView中显示它们的正确工作流。 目前,我正在使用AsyncTask下载和解析使用ArrayAdapter显示的数据。问题是AsyncTask无法生存到活动重新启动

所以我想知道服务是否是更好的解决方案,但如何将数据传递到ArrayAdapter?我是否应该始终使用数据库作为中间层来存储和检索数据

那么哪一个更好呢?使用db在保留片段或服务中执行异步任务


谢谢

最简单的解决方案是在
onRetainonConfiguration实例中返回当前的AsyncTask,或者使用带有setRetainInstance(true)的片段


您可以使用
getLastNonConfigurationInstance

以递增方式访问AsyncTask。这实际上取决于活动需要的确切内容以及数据可以显示多长时间而不会再次点击服务的要求


解决上述问题的一种方法是,点击服务获取json数据并将其存储在数据库中。现在从数据库中获取数据并在活动中显示它。现在,您可以在需要时实现刷新数据的服务。该服务只需点击web服务,并在需要时更新数据库内容。

我使用一个服务来检索http数据并将其存储到sqlite数据库中。一旦服务存储了数据(或者如果有问题),我就会启动一个广播。我的片段/活动收听这些已定义的广播,然后采取适当的行动


我发现这是一个非常干净的解决方案,避免了在活动拆卸/旋转等过程中泄漏异步任务引用的问题。

我个人认为Fedor的延迟加载方法非常灵活。事实上,即使列表中没有要显示的图像,我也会使用它。这是一次性的…检索数据并显示..使用db似乎是浪费时间。我的意思是删除行、插入行并获取它们,如果这是可以在资产中捆绑json的场景。您还可以使用与web服务对话的服务刷新json内容,并将其作为文件存储在内存中。所以,在web服务器中更新数据的情况下,您有一个回退机制。希望有帮助。顺便说一句,您建议使用服务方法而不是AsyncTaskOne?将json与资产捆绑在一起。使用asynctask获取json。在一段时间后(可能是一天或一周)使用服务从web服务获取json,并将其存储在内部内存中。我的建议是获取json并更新UI仍然可以与AsyncTask一起使用,但是从web服务下载json以备将来使用应该可以使用。