2

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

我不确定:

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

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

4

1 回答 1

2

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

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

在哪个加载器函数(onCreateLoader()、onLoadFinished() 等)中,我将我的代码用于发出 http 请求、填充本地数据库并获取在我的片段的 gridview 中显示的数据

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

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

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

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

于 2012-12-06T05:56:04.613 回答