Android:使用加载器发出http请求,更新SQLite数据库并填充GridView片段



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

我不确定:

  1. 是否使用CursorLoader、Async taskLoader或SQLiteLoader(由commons guy开发)
  2. 我在哪个加载程序函数(onCreateLoader()、onLoadFinished()等)中放入了用于进行http请求、填充本地数据库的代码;获取在我的片段中显示在网格视图中的数据
  3. 我还使用了一个懒散的列表来显示图像。如果我使用loader,这将如何融入整个过程

有人能帮我拿这个吗?我试着搜索好的例子或教程,但我还没有找到真正有用的东西。所以,如果可以的话,请提出任何建议。感谢

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

CursorLoader适用于ContentProviders(您的情况并非如此),而AsyncTaskLoader则是最佳选择。我还没有使用Commonsware中的类,但如果它们允许重写它们的一些方法,那么我想你可以使用它

在哪个加载程序函数中(onCreateLoader(),onLoadFinished()等等)我是否放入用于进行http请求的代码,填充本地数据库&获取在我的片段中的网格视图中显示的数据

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

我也在使用一个懒惰的列表来显示图像。这将如何适应如果我使用加载器

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

我的建议是不要使用Loader加载插入数据,因为它们的目的是只在后台线程上加载数据(要注意配置更改)。对于您的特殊情况,我会制作自己的AsyncTaskLoader(或使用Commonsware的库),它会查询数据库中的新数据。然后我将启动一个新的AsyncTask来执行http请求并在数据库中插入数据,然后我将在AsyncTaskonPostExecute方法中触发Loader重启(使用getLoaderManager().restartLoader...)。看看这个类似的问题,看看与你试图做的事情有关的一些问题

最新更新