16

我是 Android 开发的新手。我正在尝试创建一个从内部数据库(SQLite)读取并在列表中列出所有数据的应用程序(我正在使用listView)。

到目前为止,我得到了一个名为DatabaseHandlerextends的类SQLiteOpenHelper,它正在执行所有数据库操作(选择数据、插入数据、删除数据……)。

但是现在我想列出这些值,我在一些网站上阅读我必须使用 aLoader而不是Cursor,因此是 a ContentProvider。到目前为止,我了解它ContentProvider提供了对数据库的受控访问。

我的问题是:ContentProvider做的一样SQLiteOpenHelper吗?

另外,我使用的是 API 级别 8,并且ContentProvider仅在 API 级别 11 上可用。解决此问题的最佳方法是什么?

提前致谢。

4

2 回答 2

10

我的问题是:ContentProvider 是否与 SQLiteOpenHelper 一样?

ContentProvider如果他或她允许其他开发人员在他们的应用程序中访问应用程序的数据库,则由应用程序的开发人员实现 - 只是为了共享。它就像某个数据库的服务器,它的客户端是ContentResolver谁知道它的ContentProvider权限。例如,如果您需要从设备中获取一些联系人,那么您应该使用ContentProviderContacts 数据库,更具体地说,它是Contract 类

如果您知道适当的权限,ContentProvider您可以使用ContentResolver对象与它通信。

android.database在其他情况下,您应该通过由和android.database.sqlite类表示的 SQL 抽象模型与数据库进行交互。

而且 -ContentProvider可从主要 API 级别作为应用程序的主要组件之一使用。

更新

来自官方文档:

在开始构建提供程序之前,请执行以下操作:

确定您是否需要内容提供者。如果要提供以下一项或多项功能,则需要构建内容提供程序:

  • 您想向其他应用程序提供复杂的数据或文件。
  • 您希望允许用户将复杂数据从您的应用程序复制到其他应用程序。
  • 您想使用搜索框架提供自定义搜索建议。

  • 于 2012-11-27T14:35:57.510 回答
    8

    SQLiteOpenHelper用于管理数据库的创建和打开。它只是 sqlite 数据库的辅助类,可以在任何有 db 操作的地方使用。

    ContentProvider是 android 的 4 个基本组件之一,其他 3 个是Activity,ServiceBroadcast. ContentProvider用于管理对任何结构化数据集的访问,包括 sqlite 数据库。的数据源ContentProvider可以是数据库,但不一定是。

    ContentProvider通常用于向其他应用程序提供自己的数据,就像ContactsProvider和一样CalendarProviderContentProvider并且使用 提供一些指定的接口比直接提供数据库更安全。

    于 2012-11-27T14:58:11.200 回答