android Content Provider的使用.docx

上传人:b****3 文档编号:2792595 上传时间:2022-11-15 格式:DOCX 页数:26 大小:57.44KB
下载 相关 举报
android Content Provider的使用.docx_第1页
第1页 / 共26页
android Content Provider的使用.docx_第2页
第2页 / 共26页
android Content Provider的使用.docx_第3页
第3页 / 共26页
android Content Provider的使用.docx_第4页
第4页 / 共26页
android Content Provider的使用.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

android Content Provider的使用.docx

《android Content Provider的使用.docx》由会员分享,可在线阅读,更多相关《android Content Provider的使用.docx(26页珍藏版)》请在冰豆网上搜索。

android Content Provider的使用.docx

androidContentProvider的使用

我们大家都知道让自己的数据和其它应用程序共享有两种方式:

创建自己的ContentProvider(即继承自ContentProvider的子类)或者是将自己的数据添加到已有的ContentProvider中去,后者需要保证现有的ContentProvider和自己的数据类型相同并且具有该ContentProvider的写入的权限。

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

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

数据的存储系统可以由开发人员任意决定,一般来讲,大多数的ContentProvider都通过Android的文件存储系统或SQLite数据库建立自己的数据存储系统。

(2)扩展ContentProvider类

开发一个继承自ContentProvider类的子类代码来扩展ContentProvider类,在这个步骤主要的工作是将要共享的数据包装并以ContentResolver和Cursor对象能够访问到的形式对外展示。

具体来说需要实现ContentProvider类中的6个抽象方法。

Cursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder):

将查询的数据以Cursor对象的形式返回。

Uriinsert(Uriuri,ContentValuesvalues):

向ContentProvider中插入新数据记录,ContentValues为数据记录的列名和列值映射。

intupdate(Uriuri,ContentValuesvalues,Stringselection,String[]selectionArgs):

更新ContentProvider中已存在的数据记录。

intdelete(Uriuri,Stringselection,String[]selectionArgs):

从ContentProvider中删除数据记录。

StringgetType(Uriuri):

返回ContentProvider中的数据(MIME)类型。

booleanonCreate():

当ContentProvider启动时被调用。

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

除了实现抽象方法外,还可以做一些提高可用性的工作。

定义一个URI类型的静态常量,命名为CONTENT_URI。

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

"content:

//wyf.wpf.MyProvider"。

定义每个字段的列名,如果采用的数据库存储系统为SQLite数据库,数据表列名可以采用数据库中表的列名。

不管数据表中有没有其他的唯一标识一个记录的字段,都应该定义一个"_id"字段来唯一标识一个记录。

模式使用"INTEGERPRIMARYKEYAUTOINCREMENT"自动更新一般将这些列名字符串定义为静态常量,如"_id"字段名定义为一个名为"_ID"值为"_id"的静态字符串对象。

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

创建好一个ContentProvider必须要在应用程序的AndroidManifest.xml中进行声明,否则该ContentProvider对于Android系统将是不可见的。

如果有一个名为MyProvider的类扩展了ContentProvider类,声明该组件的代码如下:

Xml代码

1.

2.authorities="wyf.wpf.myprovider"

3....../>

--为标记添加name、authorities属性-->

authorities="wyf.wpf.myprovider"

...../>

--为标记添加name、authorities属性-->

其中name属性为ContentProvider子类的全称类名,authorities属性唯一标识了一个ContentProvider。

还可以通过setReadPermission()和setWritePermission()来设置其操作权限。

当然也可以再上面的xml中加入android:

readPermission或者android:

writePermission属性来控制其权限。

注意:

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

下边是一个例子修改了SDK中的Notes例子。

首先创建ContentProvider的CONTENT_URI和一些字段数据,字段类可以继承自BaseColumns类,它包括了一些基本的字段,比如:

_id等代码如下:

NotePad类

Java代码

1.packagexiaohang.zhimeng;

2.

3.import.Uri;

4.importandroid.provider.BaseColumns;

5.

6.publicclassNotePad{

7.//ContentProvider的uri

8.publicstaticfinalStringAUTHORITY="com.xh.google.provider.NotePad";

9.

10.privateNotePad(){}

11.

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

13.publicstaticfinalclassNotesimplementsBaseColumns{

14.privateNotes(){}

15.

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

17.publicstaticfinalUriCONTENT_URI=Uri.parse("content:

//"+AUTHORITY+"/notes");

18.

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

20.publicstaticfinalStringCONTENT_TYPE="vnd.android.cursor.dir/vnd.google.note";

21.

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

23.publicstaticfinalStringCONTENT_ITME_TYPE="vnd.android.cursor.item/vnd.google.note";

24.

25.publicstaticfinalStringDEFAULT_SORT_ORDER="modifiedDESC";

26.

27.//字段

28.publicstaticfinalStringTITLE="title";

29.publicstaticfinalStringNOTE="note";

30.publicstaticfinalStringCREATEDDATE="created";

31.publicstaticfinalStringMODIFIEDDATE="modified";

32.}

33.}

packagexiaohang.zhimeng;

import.Uri;

importandroid.provider.BaseColumns;

publicclassNotePad{

//ContentProvider的uri

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

privateNotePad(){}

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

publicstaticfinalclassNotesimplementsBaseColumns{

privateNotes(){}

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

publicstaticfinalUriCONTENT_URI=Uri.parse("content:

//"+AUTHORITY+"/notes");

//新的MIME类型-多个

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

//新的MIME类型-单个

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

publicstaticfinalStringDEFAULT_SORT_ORDER="modifiedDESC";

//字段

publicstaticfinalStringTITLE="title";

publicstaticfinalStringNOTE="note";

publicstaticfinalStringCREATEDDATE="created";

publicstaticfinalStringMODIFIEDDATE="modified";

}

}

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

NotePadProvider类

Java代码

1.packagexiaohang.zhimeng;

2.

3.importjava.util.HashMap;

4.importxiaohang.zhimeng.NotePad.Notes;

5.importandroid.content.ContentProvider;

6.importandroid.content.ContentUris;

7.importandroid.content.ContentValues;

8.importandroid.content.Context;

9.importandroid.content.UriMatcher;

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1