我是Android开发的新手。我正在尝试创建一个从内部数据库(SQLite)读取数据并在列表中列出所有数据的应用程序(我正在使用listView)。
到目前为止,我得到了一个名为DatabaseHandler的类,它扩展了SQLiteOpenHelper,它执行所有的数据库操作(选择数据、插入数据、删除数据等)。
但现在我想列出这些值,我在一些网站上看到,我必须使用Loader而不是Cursor,因此必须使用ContentProvider。到目前为止,我了解到ContentProvider提供了对数据库的受控访问。
我的问题是:ContentProvider是否与SQLiteOpenHelper做同样的事情
另外,我正在使用API level 8,而ContentProvider只在API level 11上可用。解决这个问题的最佳方法是什么?
提前谢谢。
发布于 2012-11-27 22:35:58
我的问题是: ContentProvider做的和SQLiteOpenHelper一样吗?
ContentProvider是由应用程序的开发人员实现的,如果他或她允许其他开发人员在他们的应用程序中访问应用程序的数据库-简单地说就是为了共享。它就像一个数据库的服务器,它的客户端是知道ContentProvider权限的ContentResolver,比如你需要从你的设备上获取一些联系人,那么你就应该使用contacts数据库的ContentProvider,更具体地说,它是Contract classes。
如果你知道一个适当的ContentProvider的权威机构,你可以使用一个ContentResolver对象与它通信。
在其他情况下,应该通过android.database和android.database.sqlite类表示的SQL抽象模型与数据库进行交互。
也可以从主应用程序接口级别获得- ContentProvider,作为应用程序的主要组件之一。
更新
来自官方文档:
在开始构建提供程序之前,请执行以下操作:
决定您是否需要内容提供商。如果您想要提供以下一个或多个功能,则需要构建一个内容提供商:您想要向其他applications.You提供复杂数据或文件想要允许用户将复杂数据从您的应用复制到其他apps.You想要使用搜索框架提供自定义搜索建议。
发布于 2012-11-27 22:58:11
SQLiteOpenHelper用于管理数据库的创建和打开。它只是sqlite数据库的一个辅助类,可用于任何具有db操作的地方。
ContentProvider是安卓的4个基本组件之一,其他3个是Activity,Service和Broadcast。ContentProvider用于管理对任何结构化数据集的访问,包括sqlite数据库。ContentProvider的数据源可以是数据库,但不一定是数据库。
就像ContactsProvider和CalendarProvider一样,ContentProvider通常用于向其他应用程序提供自己的数据。而且,与直接提供数据库相比,使用ContentProvider提供特定的接口更加安全。
https://stackoverflow.com/questions/13586262
复制相似问题