教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

android Content Provider的使用

来源:网络收集 时间:2026-09-25
导读: android Content Provider的示例程序,比较简单。 我们大家都知道让自己的数据和其它应用程序共享有两种方式:创建自己的Content Provider (即继承自Content Provider的子类) 或者是将自己的数据添加到已有的Content Provider中去,后者需要保证现有的Content

android Content Provider的示例程序,比较简单。

我们大家都知道让自己的数据和其它应用程序共享有两种方式:创建自己的Content Provider (即继承自Content Provider的子类) 或者是将自己的数据添加到已有的Content Provider中去,后者需要保证现有的Content Provider和自己的数据类型相同并且具有该 Content Provider的写入的权限。

如果需要创建一个Content Provider,则需要进行的工作主要分为以下3个步骤。

(1) 建立数据的存储系统

数据的存储系统可以由开发人员任意决定,一般来讲,大多数的Content

Provider都通过Android的文件存储系统或SQLite 数据库建立自己的数据存储系统。

(2)扩展 ContentProvider类

开发一个继承自ContentProvider类的 子类代码来扩展 ContentProvider类,在这个步骤主要的工作是将要共享的数据包装并以ContentResolver 和

Cursor对象能够访问到的形式对外展示。具体来说需要实现ContentProvider 类中的6个抽象方法。

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):将查询的数据以Cursor 对象的形式返回。

Uri insert(Uri uri, ContentValues values):向 Content Provider中插入新数据记录,ContentValues 为数据记录的列名和列值映射。

int update(Uri uri, ContentValues values, String selection, String[] selectionArgs):更新Content Provider中已存在的数据记录。

int delete(Uri uri, String selection, String[] selectionArgs):从Content Provider中删除数据记录。

String getType(Uri uri):返回Content Provider中的数据( MIME )类型。

boolean onCreate():当 Content Provider 启动时被调用。

以上方法将会在ContentResolver 对象中调用,所以很好地实现这些抽象方法会为ContentResolver提供一个完善的外部接口。除了实现抽象方法外,还可以做一些提高可用性的工作。

定义一个 URI 类型的静态常量,命名为CONTENT_URI。 必须为该常量对象定义一个唯一的URI字符串,一般的做法是将 ContentProvider子类的全称类名作为URI字符串,如:

android Content Provider的示例程序,比较简单。

"content://wyf.wpf.MyProvider"。

定义每个字段的列名,如果采用的数据库存储系统为SQLite 数据库,数据表列名可以采用数据库中表的列名。不管数据表中有没有其他的唯一标识一个记录的字段,都应该定义一个"_id"字段 来唯一标识一个记录。模式使用 "INTEGER PRIMARY KEY AUTOINCREMENT" 自动更新 一般将这些列名字符串定义为静态常量, 如"_id"字段名定义为一个名为"_ID" 值为 "_id" 的静态字符串对象。

(3)在应用程序的AdnroidManifest.xml 文件中声明Content Provider组件。

创建好一个Content Provider必须要在应用程序的AndroidManifest.xml 中进行声明,否则该Content Provider对于 Android系统将是不可见的。如果有一个名为MyProvider的类扩展了 ContentProvider类,声明该组件的代码如下: Xml代码

1. <provider name="wyf.wpf.MyProvider"

2. authorities="wyf.wpf.myprovider"

3. ...../> <!-- 为<provider>标记添加name、authorities属性-->

其中name属性为ContentProvider 子类的全称类名,authorities 属性唯一标识了一个ContentProvider。还可以通过 setReadPermission() 和

setWritePermission() 来设置其操作权限。当然也可以再上面的 xml中加入 android:readPermission 或者 android: writePermission属性来控制其权限。

注意:因为ContentProvider可能被不同的进程和线程调用,所以这些方法必须是线程安全的。

下边是一个例子修改了 SDK 中的 Notes例子。首先创建 ContentProvider 的 CONTENT_URI 和 一些字段数据,字段类可以继承自BaseColumns类,它包括了一些基本的字段,比如:_id等 代码如下:

NotePad类

Java代码

1. package xiaohang.zhimeng;

2.

3. import http://doc.guandang.net.Uri;

4. import android.provider.BaseColumns;

5.

6. public class NotePad {

7. //ContentProvider的uri

8. public static final String AUTHORITY =

"com.xh.google.provider.NotePad";

9.

android Content Provider的示例程序,比较简单。

10.private NotePad(){}

11.

12.//定义基本字段 实现BaseColumns 这个接口里边已经定义了"_id"字段所以这里不用定义了

13.public static final class Notes implements BaseColumns{

14.private Notes(){}

15.

16.//Uri.parse 方法根据指定字符串创建一个 Uri 对象

17.public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/notes");

18.

19.//新的MIME类型-多个

20.public static final String CONTENT_TYPE =

"vnd.android.cursor.dir/vnd.google.note";

21.

22.//新的MIME类型-单个

23.public static final String CONTENT_ITME_TYPE =

"vnd.android.cursor.item/vnd.google.note";

24.

25.public static final String DEFAULT_SORT_ORDER = "modified DESC"; 26.

27.//字段

28.public static final String TITLE = "title";

29.public static final String NOTE = "note";

30.public static final String CREATEDDATE = "created";

31.public static final String MODIFIEDDATE = "modified";

32.}

33.}

然后我们需要来创建自己的 ContentProvider 类的 NotePadProvider,它包括了查询、添加、删除、更新等操作以及打开和创建数据库,代码如下:

NotePadProvider 类

Java代码

1. package xiaohang.zhimeng;

2.

3. import java.util.HashMap;

4. import xiaohang.zhimeng.NotePad.Notes;

5. import android.content.ContentProvider;

6. import android.content.ContentUris;

7. import android.content.ContentValues;

android Content Provider的示例程序,比较简单。

8. import android.content.Context;

9. import android.content.UriMatcher;

10.import android.content.res.Resources;

11.import android.database.Cursor;

12.import android.database.SQLException;

13.import android.database.sqlite.SQLiteDatabase;

14.import android.database.sqlite.SQLiteOpenHelper;

15.import android.database.sqlite.SQLiteQueryBuilder;

16.import http://doc.guandang.net.Uri;

17.import android.text.TextUtils;

1 …… 此处隐藏:11727字,全部文档内容请下载后查看。喜欢就下载吧 ……

android Content Provider的使用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1441461.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)