安卓:CursorLoader、LoaderManager、SQLite

Posted

技术标签:

【中文标题】安卓:CursorLoader、LoaderManager、SQLite【英文标题】:Android: CursorLoader, LoaderManager, SQLite 【发布时间】:2012-06-16 13:46:42 【问题描述】:

尝试更新我的旧应用,其中某些方法已被弃用。我发现如果我想使用显示来自 db 的数据的 ListView,我应该使用 LoaderManager + CursorLoader。 CursorLoader 与内容提供者一起工作。那么对于我的数据库中的每个表,我现在应该创建内容提供程序吗?我为什么要 ?据我所知,内容提供商用于与其他应用程序共享一些数据库信息,但我的应用程序不共享任何信息。那么我可以在没有内容提供者的情况下使用 CursorLoader 吗???

【问题讨论】:

查看我关于该主题的博文:Understanding the LoaderManager @Jim 内容提供商有什么问题可以帮我吗? 【参考方案1】:

我已经就这个主题写了blog post。您还可以查看此answer 了解更多信息。希望它会为您解决问题。

正如 Barak 所提到的,可以通过扩展 AsyncTaskLoader<Cursor> 类来实现没有内容提供者的 CursorLoader。也就是说,大多数教程和示例代码都使用ContentProviders,android 团队似乎也鼓励使用它。它也比实现自己的类要简单得多。

也就是说,如果您真的不想使用内容提供程序,Dianne Hackborn(Android 框架开发人员之一,在 SO 上也称为“hackbod”)建议您自己编写使用您的数据库类而不是内容提供程序的加载程序。最简单的方法是从兼容性库中获取CursorLoader 类的源代码,并将提供者查询替换为对您自己的数据库助手类的查询。

【讨论】:

我认为值得一提的是,仅当您计划向其他应用程序提供数据时才鼓励使用ContentProviders。如果你不这样做(即数据对你的应用程序来说是私有的),那么我们鼓励你使用普通的 SQLite 数据库。有关更多信息,请查看ContentProvider 的文档。 我认为“从兼容性库中获取CursorLoader类的源代码,并且......”是最好的选择,不是吗? 我不得不用我自己的类扩展CursorLoader 来处理OrmLite【参考方案2】:

是的,您可以,您可以使用自定义数据加载器来加载您定义的对象或任何对象类型或列表。

只需在兼容性库示例和演示中查看来自 Android sdk 的 LoaderCustomSupport.java 示例。

【讨论】:

以上是关于安卓:CursorLoader、LoaderManager、SQLite的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ViewPager 中使用 cursorLoader?

CursorLoader 选择

Recyclerview + 内容提供者 + CursorLoader

android studio中的cursorLoader

数据更改后 CursorLoader 不更新

android - 没有 Content Provider 的 CursorLoader 和 SQLite