Android:使用 Loader 发出 http 请求、更新 SQLite 数据库并填充 GridView fragment

标签 android android-loadermanager

在我的 Android 应用程序中,我发出一个 http 请求,获取一些数据,将其放入本地 sqlite 数据库中,然后使用该数据填充 gridview。我有适用于某个 Activity 的代码,但我现在需要使用 fragment 来完成此操作,因为有许多类似的页面要显示。我读到使用 Loader 是处理 fragment 中数据的最佳方式。

我不确定:

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

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

最佳答案

Whether to use CursorLoader, Async taskLoader or SQLiteLoader(developed by commons guy).

CursorLoader 适用于 ContentProviders(这不是您的情况),而 AsyncTaskLoader 是可行的方法。我没有使用 Commonsware 中的类,但如果它们允许重写其中的某些方法,那么我想您可以使用它。

In which of the loader functions (onCreateLoader(), onLoadFinished() etc.) do I put my code for making http request, populating the local database & getting the data displayed in a gridview in my fragment

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

I am also using a lazyload list to show images. How will that fit into the entire thing if I use loader

由于我没有看到你的代码,我认为这两部分没有联系。我猜测您直接在 GridView 的适配器中使用延迟图像加载代码。

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

关于Android:使用 Loader 发出 http 请求、更新 SQLite 数据库并填充 GridView fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736946/

相关文章:

android - restartLoader 和 onContentChanged 的​​区别

android - MapItemizedOverlay 中的 OnTouchEvent

android - 如何共享元素从 fragment 过渡到 Activity

java - 创建一个按钮并以编程方式将其添加到 View 中

android - LoaderManager 的范围是什么?

android - 如何将 AsyncTaskLoader 绑定(bind)到 Fragment 的生命周期?

android - 将Eclipse Android项目导入到Android Studio中,但是如何构建呢?

Android、AsyncTask、onProgressUpdate 和 onPostExecute 未被调用

android - IllegalStateException - 使用 AutocompleteTextView 支持 LoaderManager

android - 在开始新 Activity 、更改新 Activity 的方向并按下后退按钮后,加载程序不会保留