android Content Provider的使用
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;
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




