Async Json 提要晚于 AsyncTask 完成以从 sqlite DB 加载数据。如何同步它们或更好的解决方案?

Posted

技术标签:

【中文标题】Async Json 提要晚于 AsyncTask 完成以从 sqlite DB 加载数据。如何同步它们或更好的解决方案?【英文标题】:Async Json feed finishing later than AyncTasks to load data from sqllite DB. How to sync them or better solution? 【发布时间】:2017-03-01 08:28:06 【问题描述】:

Async Json 提要晚于 AyncTasks 完成以从 sqllite DB 加载数据。如何同步它们或任何更好的解决方案?

我搜索了 ***,但找不到像我这样的特殊问题。

在我的应用程序中,所有数据都从 sqllite DB 显示给用户,该数据库存在于移动设备本身中。 sqlite DB 中的数据是通过单击按钮使用 AsyncTask JSON 提要创建的。在我的一种情况下,下载数据的 AsyncTask 在后台启动,但用户已经登陆列表片段以查看数据。为了确保用户不等待下载完成,我也在异步任务中实现了这一点。现在,这个显示数据的异步任务在异步数据下载和插入之前完成了很多。这意味着用户总是看到旧数据并且必须回来查看新数据。对于这个特殊问题的任何解决方案将不胜感激。谢谢。

【问题讨论】:

如果提要由多个对象组成,您可以将任务分成几个较小的任务,然后在加载时一一显示? Feed 只返回一个对象,List 向用户显示相同的对象(但来自数据库而不是直接来自 feed)。 从活动中监听 db 表的变化,并在检测到变化时重新查询。所以网络调用只会保存到数据库表,从而触发重新查询。 好的,那么您的解决方案似乎很合适,尽管您可以使用事件来表示下载已完成,并刷新内容而无需用户离开页面并返回 或者甚至使用 evenbus 将提要数据从网络调用保存到 db 后发送到 UI。 【参考方案1】:

我可以通过将 Handler 实现为两个异步任务之间的对话机制来解决此问题。我得到了这篇文章的帮助。一旦数据库插入在异步任务中结束,那么我将向被调用程序发送消息以重置列表适配器。 感谢大家在这方面的帮助。 https://***.com/a/26139605/5845259

【讨论】:

以上是关于Async Json 提要晚于 AsyncTask 完成以从 sqlite DB 加载数据。如何同步它们或更好的解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

获得致命异常:使用 Async 类的 AsyncTask #1

Async分析

Android Asynctask vs Service vs Scheduled Jobs

C# Async Await 注意事项

AsyncTask下载JSON

IActionResult 或 async Task<IActionResult> 有啥好处?