首页 理论教育 如何创建ContentProvider?

如何创建ContentProvider?

时间:2023-06-30 理论教育 版权反馈
【摘要】:至此我们已经知道如何使用ContentProvider,现在来看如何自己创建一个ContentProvider。创建Content Provider需要遵循以下步骤:创建一个继承ContentProvider父类的类。大多数ContentProvider使用Android文件系统或SQLite数据库来保持数据,但是也可以用任何想要的方式来存储。在Android Menifest.xml中使用标签来设置ContentProvider。下列代码将创建一个ContentProvider,它仅仅是存储用户名称,并显示所有的用户名称。一个名为“MyContentProvider”的ContentProvider创建完成,它用于从Sqlite数据库中添加和读取记录。ContentProvider的入口需要在Android Manifest.xml中配置。

如何创建ContentProvider?

至此我们已经知道如何使用ContentProvider,现在来看如何自己创建一个ContentProvider。创建Content Provider需要遵循以下步骤:

(1)创建一个继承ContentProvider父类的类。

(2)定义一个名为“CONTENT_URI”,并且是public static final的Uri类型的类变量,必须为其指定唯一的字符串值,最好是类的全名称。例如:

(3)创建数据存储系统。大多数ContentProvider使用Android文件系统或SQLite数据库来保持数据,但是也可以用任何想要的方式来存储。

(4)定义要返回客户端的数据列名。如果正在使用Android数据库,数据列的使用方式就和以往所熟悉的其他数据库一样。但是,必须为其定义一个叫“_id”的列,它用来表示每条记录的唯一性。

(5)如果要存储字节型数据(如位图文件等),那么,保存该数据的数据列其实是一个表示实际保存文件的URI字符串。客户端通过它来读取对应的文件数据,处理这种数据类型的ContentProvider需要实现一个名为“_data”的字段,_data字段列出该文件在Android系统的精确路径。这个字段不仅供客户端使用,也可以供ContentResolver使用。客户端可以调用Content Resolver.openOutputStream()方法来处理该URI指向的文件资源。如果是Content Resolver本身的话,由于其持有的权限比客户端要高,所以它能直接访问该数据文件。

(6)声明public static String型的变量,用于指定要从游标处返回的数据列。

(7)查询返回一个Cursor类型的对象。所有执行写操作的方法,如insert(),update()以及delete(),都将被监听。可以通过使用Content Resover().notifyChange()方法来通知监听器关于数据更新的信息。

(8)在Android Menifest.xml中使用标签来设置ContentProvider。

(9)如果要处理的数据类型是一种比较新的类型,就必须先定义一个新的MIME类型,以供ContentProvider.ge Type(url)来返回。(www.xing528.com)

MIME类型有两种形式:

一种为指定的单个记录,还有一种为多条记录。这里给出常用的格式:①vnd.android.cursor.item/vnd.yourcompanyname.contenttype(单个记录的MIME类型)。例如,一个请求列车信息的URI content://com.example.transportationprovider/trains/122,可能就会返回typevnd.android.cursor.item/vnd.example.rail这样一个MIME类型。②vnd.android.cursor.dir/vnd.yourcompanyname.contenttype(多个记录的MIME类型)。例如,一个请求所有列车信息的URI content://com.example.transportationprovider/trains,可能就会返回vnd.android.cursor.dir/vnd.example.rail这样一个MIME类型。

下列代码将创建一个ContentProvider,它仅仅是存储用户名称,并显示所有的用户名称(使用SQLLite数据库存储这些数据)。

上面的类中定义了ContentProvider的CONTENT_URI以及数据列。下面将基于上面的类来定义实际的Content Provider类。

一个名为“MyContentProvider”的ContentProvider创建完成,它用于从Sqlite数据库中添加和读取记录。

ContentProvider的入口需要在Android Manifest.xml中配置。

之后我们可以使用这个定义好的Content Provider:

上面的类将先向数据库中添加一条用户数据,然后显示数据库中所有的用户数据。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈