Android数据共享之ContentProvider总结_android项目报告总结
Android数据共享之ContentProvider总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“android项目报告总结”。
Content Provider 由上一节内容,我们了解到Adroid的数据都是私有的,那么对于像通讯录之类,多个APP(拨号、通话、短消息…)都需要共享使用,该怎么实现呢?
答案就是ContentProvider。
概述:
ContentProvider是Android平台中,在不同应用程序之间实现数据共享的一种机制。一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制。并且此种方式忽略了底层的数据存储实现,ContentProvider提供了一种统一的通过Uri实现数据操作的方式。
Android为常用的数据类型(图片,音视频,通讯录)提供了大量的ContentProvider,它们被定义在android.provider包下面。
操作模型:
ContentProvider类:
定义在android.content包下面,主要数据存取类,提供了常用的数据操作接口 • delete(): 删除数据集
• insert():添加数据集
• qurey():查询数据集
• update():更新数据集
• onCreate():初始化底层数据集和建立数据连接等工作
• getType():返回指定URI的MIME数据类型,ContentResolver类:
ContentProvider是实际操作数据库的方法,客户端通过ContentResolver实现,ContentResolver和ContentProvider提供了对应的方法,诸如insert(), delete(), query()和update()之类的方法。我们间接的通过ContentResolver的方法来操作ContentProvider。
Uri介绍
ContentProvider 通过URI对象共享数据;Uri代表了要操作的数据,Uri主要包含了两部分信息:
1》需要操作的ContentProvider
2》对ContentProvider中的什么数据进行操作
Uri是一个通用资源标志符,将其分为A,B,C,D 4个部分:
A:无法改变的标准前缀,包括;“content://”、“tel://”等。当前缀是“content://”时,说明通过一个Content Provider控制这些数据;
B:URI的标识,它通过authorities属性声明,用于定义了是哪个ContentProvider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。例如:
“content:// com.test.contentproviderdemo ”;
C:路径,可以近似的理解为需要操作的数据库中表的名字,如:“content:// com.test.contentproviderdemo/people”中的people
D:如果URI中包含表示需要获取的记录的ID,则就返回该id对应的数据,如果没有ID,就表示返回全部;
将字符串转成Uri,Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people ”)
跟Uri相关的两个操作类:
A、public cla UriMatcher //匹配
//注册匹配Uri路径
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配content:// com.test.contentproviderdemo/people路径,返回匹配码为1 sMatcher.addURI(“com.test.contentproviderdemo”, “people”, 1);
//如果match()方法匹配content://com.test.contentproviderdemo/people/2路径,返回匹配码为2 sMatcher.addURI(“com.test.contentproviderdemo”, “people /#”, 2);//#号为通配符
switch(sMatcher.match(Uri.parse(“content:// com.test.contentproviderdemo/people/10”))){
case 1
break;case 2
break;default://不匹配
break;}
B、public cla ContentUris //获取ID
withAppendedId(uri, id)用于为路径加上ID部分:
Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people ”)Uri resultUri = ContentUris.withAppendedId(uri, 10);parseId(uri)方法 用于从路径中获取ID部分:
Uri uri = Uri.parse(“content:// com.test.contentproviderdemo/people /10”)long personid = ContentUris.parseId(uri);//获取的结果为:10
主要步骤:
1.创建保存数据的文件或者数据库。
2.在当前应用程序中定义一个ContentProvider,重载相关操作接口。如: public cla PeopleProvider extends ContentProvider{ public boolean onCreate()public Uri insert(Uri uri, ContentValues values)public int delete(Uri uri, String selection, String[] selectionArgs)public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)} public String getType(Uri uri)3.在当前应用程序的AndroidManifest.xml中注册此ContentProvider
android:authorities = “com.test.contentproviderdemo”/> 4.其他应用程序通过ContentResolver和Uri来获取此ContentProvider的数据。
ContentResolver resolver = getContentResolver();5.通过注册registerContentObserver监听ContentProvider的数据变化;
ContentProvider完整实例:
ContentResolverDemo.zipContentProviderDemo.zip
ContentProviderDemo是一个无界面的示例,仅提供一个ContentProvider组件,供其他应用程序进行数据交换底层使用SQLite数据库,支持数据的添加、删除、更新和查询等基本操作
ContentResolverDemo是使用ContentProvider的示例,自身不具有任何数据存储功能,仅是通过URI访问ContentProviderDemo示例提供的ContentProvider。