【问题标题】:AsyncTask and CursorLoader [Android]AsyncTask 和 CursorLoader [Android]
【发布时间】:2017-02-04 16:42:14
【问题描述】:

我用于获取数据的AsyncTask 很长,同时,在构建我的recyclerview 的过程中,我想检查cursorloader 是否能够正确地从我的内容提供者那里查询。

请耐心等待,我使用 Loader Callbacks interfaceonLoadFinished 来获得结果。由于asynctask 仍在运行,加载程序仍然调用内容提供程序,因为它得到更新,直到asynctask 结束。除了onLoadFinished 主要处理用光标数据填充adapter 的内容之外,我不应该担心它会在asynctask 继续运行时同时打印出日志语句,但我想确认.

我确实打算最终将此 asynctask 移动到仅通过 broadcast 调用的 intentservice

【问题讨论】:

  • 老实说,我并不真正了解您想要什么。你想稍后得到结果吗?
  • 另外,请添加一些您尝试过的代码。如果我几乎不理解这个问题和两个,我无能为力,如果我没有看到任何尝试。
  • 抱歉,我在睡觉前匆忙写下了这个问题,我自己也在思考这个问题。我有代码,但长话短说,asynctask 正在运行并插入到我的内容提供程序中,而光标加载器会随着新数据的流入而不断刷新,直到 asynctask 完成。因为这只会在程序第一次启动时发生,它最终会影响我的 UI 和 Recycler View 在我实现它时加载。

标签: android android-asynctask android-contentprovider android-cursor android-cursorloader


【解决方案1】:

您可以调用getLoaderManager().restartLoader(URL_LOADER, null, HomeFragment.this); 在您的 AsyncTask onPostExecute 方法上重新启动加载程序。您需要先在 onCreate() 方法上初始化 Loader。

这样,加载器将使用启动时的相同投影进行刷新,并从数据库中获取 AsyncTask 操作的结果。

【讨论】:

  • 似乎是正确的方法,但我可能需要找到一种方法从我的异步任务中调用 LoaderManager,该任务位于单独的文件中。你猜对了,我没有给出我的片段实现加载回调方法的代码。我在睡觉前几秒钟发了这篇文章,想了想。
  • @kthieu 您可以使用 EventBus、Otto 或任何其他面向事件的库来实现该目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
相关资源
最近更新 更多