Android:使用Loader发出http请求,更新SQLite数据库&填充GridView片段

时间:2012-12-06 04:25:19

标签: android android-loadermanager

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

我不确定:

  1. 是否使用CursorLoader,Async taskLoader或SQLiteLoader(由commons guy开发)。
  2. 在哪个加载器函数(onCreateLoader(),onLoadFinished()等)中,我是否将我的代码用于发出http请求,填充本地数据库&获取数据显示在我的片段中的gridview中
  3. 我也使用lazyload列表来显示图像。如果我使用loader
  4. ,它将如何适应整个事物

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

1 个答案:

答案 0 :(得分:2)

  

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

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

  

在哪个加载器函数中(onCreateLoader(),onLoadFinished()   我把我的代码用于发出http请求,填充本地   数据库&在我的片段

中获取显示在gridview中的数据

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

  

我也使用延迟加载列表来显示图像。这将如何适应   整个事情,如果我使用装载机

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

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