Android 中ContentProvider的实例详解
Android中ContentProvider的实例详解
ContentProvider的简单介绍:
*Android中的ContentProvider机制可支持在多个应用中存储和读取数据。这也是跨应用
共享数据的唯一方式。在Android系统中,没有一个公共的内存区域,供多个应用共享存储数据;
*Android提供了一些主要数据类型的ContentProvider,比如:音频、视频、图片和私人通讯录等;
在android.provider包下面找到一些android提供的ContentProvider;可以通过获得ContentProvider,
查询他们包含的数据(查询的条件是:已经获得适当的读取权限);
1、Uri的介绍:
Uri代表了要操作的数据,Uri主要包含了两部分的信息: *需要操作的ContentProvider *对ContentProvider中的什么数据进行操作; 一个Uri由下列几个部分组成: content://cn.itcast.provider.personprovider/person/10
解析:
*content://:scheme *cn.itcast.provider.personprovider:主机名或anthority *person/10:路径 *10:ID
1.1:ContentProvider(内容提供者)的scheme已经由Android所规定,scheme为content://主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。路径path,可以用来表示我们要操作的数据,路径的构建应根据业务定,例如:
(1)要操作person表中id为10的记录,构建路径如下:/person/10;
(2)要操作person表中id为10的记录的name字段:person/10/name;
(3)要操作person表中的所有记录: /person;
(4)要操作xxx表中的记录: /xxx;
(5)如果要操作的数据部是来自数据库,而是来自文件、xml或网络等其他存储方式;
例如:要操作xml文件中person节点下的name节点,构建路径如下:/person/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法:
Uriuri=Uri.parse("content://itcast.provider.personprovider/person");
2、UriMatcher类使用介绍:
由于Uri代表了要操作的数据,所以经常需要解析Uri,并从Uri中获取数据,Android中提供了两个用于操作Uri的工具类:
*UriMatcher
*ContentUris
UriMatcher类,用于匹配Uri,用法如下:
/*UriMathcer类的用法*/ publicvoiduriMatcher(){ /*常量UriMatche.NO_MATCH标示部匹配任何路径的返回码*/ UriMatchersMatcher=newUriMatcher(UriMatcher.NO_MATCH); /*如果match()方法匹配content://cn.itcast.provider.personprovider/person路径, *返回匹配码为1 */ /*添加需要匹配的URL,如果匹配就会返回匹配码*/ sMatcher.addURI("cn.itcast.provider.personprovider","person",1); /*#为通配符*//*match():方法匹配:content://cn.itcast.provider.personprovider/person/230 *路径,返回匹配码2 **/ sMatcher.addURI("cn.itcast.provider.personprovider","person/#",2); /*按上述添加的规则进行匹配,不同的路径匹配返回不同的匹配码*//*下列路径返回的匹配码为2*/ intcode=sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10")); }
提示:
注册需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配
就返回匹配码,匹配码是调用addURI()方法传入的第三个参数;
3、ContentUris类的使用介绍:
ContentUris类,用于获取Uri路径后面的ID部分,有两个比较实用的方法:
*withAppended(uri,id)用于为路径加上ID部分; Uriuri=Uri.parse("content://cn.itcast.provider.personprovider/person"); /*为路径添加ID部分*/ UriresultUri=ContentUris.withAppendedId(uri,10); /*添加后的值为:content://cn.itcast.provider.personprovider/person/10*/ *parseID(uri)从路径中获取ID部分; Uriuri=Uri.parse("content://cn.itcast.provider.personprovider/person/10"); /*下列获取到的结果是:10*/ longpersonid=ContentUris.parseId(uri);
如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对苯中的支持,