在我的 Android 应用程序中,我发出一个 http 请求,获取一些数据,将其放入本地 sqlite 数据库中,然后使用该数据填充 gridview。我有适用于某个 Activity 的代码,但我现在需要使用 fragment 来完成此操作,因为有许多类似的页面要显示。我读到使用 Loader 是处理 fragment 中数据的最佳方式。
我不确定:
- 是否使用CursorLoader、Async taskLoader或SQLiteLoader(由commons Guy开发)。
- 我在哪个加载器函数(onCreateLoader()、onLoadFinished() 等)中放置用于发出 http 请求、填充本地数据库并获取 fragment 中 gridview 中显示的数据的代码
- 我还使用延迟加载列表来显示图像。如果我使用加载器,这将如何适应整个事情
有人可以帮我解决这个问题吗?尝试寻找好的示例或教程,但我还没有真正找到真正有用的东西。所以,如果可以的话,请提出建议。谢谢
最佳答案
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/