【问题标题】:Android: Using a Loader to make http request, update SQLite database & populate GridView fragmentAndroid:使用 Loader 发出 http 请求,更新 SQLite 数据库并填充 GridView 片段
【发布时间】:2012-12-06 04:25:18
【问题描述】:

在我的 Android 应用程序中,我发出一个 http 请求,获取一些数据,将其放入我的本地 sqlite 数据库,然后使用该数据填充一个网格视图。我有一个活动的代码,但我现在需要使用片段来完成这项工作,因为有许多类似的页面要显示。我读到使用 Loader 是处理片段中数据的最佳方式。

我不确定:

  1. 是否使用 CursorLoader、Async taskLoader 或 SQLiteLoader(由 commons guy 开发)。
  2. 我在哪个加载器函数(onCreateLoader()、onLoadFinished() 等)中放置了用于发出 http 请求、填充本地数据库和获取在我的片段中的 gridview 中显示的数据的代码
  3. 我还使用延迟加载列表来显示图像。如果我使用加载器,这将如何融入整个事情

有人可以帮我解决这个问题吗?尝试搜索好的示例或教程,但我还没有真正找到真正有用的东西。所以,如果可以的话,请提出任何建议。谢谢

【问题讨论】:

    标签: android android-loadermanager


    【解决方案1】:

    是否使用 CursorLoader、Async taskLoader 或 SQLiteLoader(由 commons guy 开发)。

    CursorLoader 是为ContentProviders(这不是你的情况)和AsyncTaskLoader 是要走的路。我没有使用 Commonsware 中的类,但如果它们允许覆盖他们的一些方法,那么我想你可以使用它。

    在哪个加载器函数中(onCreateLoader(), onLoadFinished() 等)我是否将我的代码用于发出 http 请求,填充本地 数据库和获取显示在我的片段中的网格视图中的数据

    没有这些回调,因为它们(很可能)在主 UI 上运行,并且您不得在其中进行网络操作。 Loader 子类具有在后台线程上运行的 loadInBackground 方法。在此方法中,Loader 查询数据,您可以在其中放置网络请求和数据库更新。但是您需要非常小心不要在数据库中插入重复数据。

    我还使用延迟加载列表来显示图像。这将如何融入 如果我使用加载器,整个事情

    由于我没有看到您的代码,我认为这两个部分没有联系。我猜你是直接在GridView的适配器中使用了惰性图片加载代码。

    我的建议是不要使用加载器来加载插入数据,因为它们的目的是仅在后台线程上加载数据(负责配置更改)。对于您的特殊情况,我会创建自己的 AsyncTaskLoader(或使用 Commonsware 的库)来查询数据库以获取新数据。然后我会启动一个新的AsyncTask 来执行http 请求并将数据插入数据库中,然后我会在AsyncTask(使用getLoaderManager().restartLoader...)的onPostExecute 方法中触发Loader 重新启动。查看at this similar question,了解与您正在尝试做的事情相关的一些问题。

    【讨论】:

    • 感谢您的深入解释。我认为您建议的方法对我来说会更好。我会尝试一次..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多