ContentProvider作为android四大组件之一,其实在实际用处中用的并不是很多
但这并不代表他的作用不大,今天就来带大家入个门。
介绍一下ContentProvider的用法。
ContentProvider为存储和获取数据提供统一的接口。她可以在不同的应用程序之间共享数据。
当然,比较常用的是调用系统的一些数据
Android已经为常见的一些数据提供了默认的ContentProvider
比如我在做简聆音乐播放器开发时,就是使用了ContentProvider获取所有本地的音乐文件
下面开始介绍用法
1 内容提供端
首先我们要在内容提供端创建一个类继承ContentProvider
这里注意两点
-->在相应重写的方法提供代码对数据库的指定表进行增删改查
-->oncreate方法在第一次创建Contentprovider时调用,后面则不会调用
2 配置清单里注册Contentprovider,具体格式如下:
<Provider
android:name="类名"
android:authority(域名,即地址)="域名地址"
android:exported="boolean值,是否允许外界也就是其他APP访问"/>
3 内容接收端(不需要去配置清单注册)
这里需要进行以下操作
-->在要接受的地方初始化,获得接受端对象
ContentResolver cr = getContentResolve();
-->创建Uri对象
什么是Uri?
uri:统一资源标识符
格式如如content://ContentProvider类//Path数据库中某一张表或者关联表//Authority某一字段内容的匹配符
Uri uri=Uri.parse("域名地址")
-->内容接收者对象cr执行相关增删改查操作即可
这里有介绍要注意的重写的方法:
---->插入方法里insert要返回一个URI
这个uri是传入的uri后面加上传入的数据id,然后返回回去
所以返回值应该这么写:
long id=sqldatabase.insert("表名",null,values);//得到id
if(id>0){
return ContentUris.withAppendedId(uri,id);//传回去
}
return null;否则传空值;
---->删除方法delete返回删除的数据个数(int类型)
int delnum=sqldatabase.delete("表名",selection,selectionArgs);//得到删除的数据个数
---->修改方法update返回修改的数据个数(int类型)
---->查询方法query自然返回数据库的Cursor
当数据库有多张表的情况下,ContentResolver一般在uri后面拼接上表的名字
如content://ContentProvider类//Path数据库中某一张表或者关联表
ContentProvider端则使用一个UriMatcher类
UriMatcher urimatcher=new UriMatcher(UriMatcher.NO_MATCH);//注册UriMatcher类型
onCreate方法中:
urimatcher.addURI("ContentProvider类","uri后面拼接上的表1的名字",1);//表设置为类型1
urimatcher.addURI("ContentProvider类","uri后面拼接上的表2的名字",2);//表设置为类型2
查询query方法中:
int code=uriMatcher.matcher(uri);//得到表类型(1或者2)
得到code则可以根据code查询不同的表了。
当code为-1时表示uri不合法
以上就是ContentProvider基本的介绍了。