一、URI:统一资源定位符,Universal Resource Identifier的简称
每一个ContentProvider都拥有一个公共的URI,这个URI用于表示ContentProvider提供的数据
二、URI的组成:
例:
content://com.example.codelab.transportationprovider/train:要操作train数据资源所有的记录(如train表)
content://com.example.codelab.transportationprovider/train/10:要操作train数据资源中id为10的记录(如train表中id为10的记录)
content://com.example.codelab.transportationprovider/train/10/name:要操作train数据资源中id为10的记录的name字段
content://com.example.codelab.transportationprovider/train/international:要操作train表下的子表international
content://media/external:这个Uri将返回设备上存储的所有图片;
content://media/external/images/media/4:某个图片的Uri
content://contacts/people:这个Uri将返回设备上的所有联系人信息
三、URI 常用方法:
1、static Uri parse(String UriString):将一个字符串转换为Uri
例如:
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/2")
2、 List getPathSegments():获取uri中path路径部分存入一个List中
例如:
uri.getPathSegments().get(1)
content://mars.cp.FirstContentProvider/users/1
四、UriMatcher类与ContentUris类的引入
因为Uri代表了要操作的数据,所以我们经常需要解析Uri,并从Uri中获取数据。
Android系统提供了两个用于操作Uri的工具类:
UriMatcher
ContentUris
五、UriMatcher类
UriMatcher用于匹配Uri,当应用程序通过URI访问ContentProvider时,UriMatcher则检查该Uri是否符合标准,如果符合标准,则使用该URI
1、UriMatcher检查URI是否合法的原理:
对于一个URI的规则起一个编号,如果该Uri符合该原则,则返回该编号,否则则不返回编号即没有这个规则。从而判定URI是否合法
2、UriMatcher类的使用步骤:
①、初始化UriMatcher类
②、设置所需的Uri规则
③、与已经注册的Uri进行匹配
3、UriMatcher类的具体使用:
①、第一步:初始化
构造函数:创建URI树的根节点
- public UriMatcher():默认根节点编码为-1;
- public UriMatcher(int code):code参数指定根节点的编码。
例
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//常量UriMatcher.NO_MATCH表示Uri不匹配时的返回码
②、第二步设置需要匹配Uri路径规则
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person”, 1);//添加需要匹配uri(content://cn.itcast.provider.personprovider/person),如果匹配成功就会给该Uri一个匹配码1
sMatcher.addURI(“cn.itcast.provider.personprovider”, “person/#”, 2);//#号为数字通配符,用了匹配任何数字,*匹配任何字符
匹配码的值需要大于0,否则抛出IllegalArgument异常
③、第三步:用match()方法匹配Uri,返回匹配码。
switch (sMatcher.match(Uri.parse("content://cn.itcast.provider.personprovider/person/10"))) {
case 1:。。。。。。
break;
case 2:。。。。。。。
break;
default://不匹配
break;
}
六:ContentUris类
ContentUris类用于操作Uri路径后面的ID部分。该类下的方法都为静态方法。
它有两个比较实用的方法:
1、public static Uri withAppendedId (Uri contentUri, long id)
该方法用于为路径加上ID部分。
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//生成后的Uri为:content://cn.itcast.provider.personprovider/person/10
2、public static long parseId (Uri contentUri)
该方法用于从路径中获取ID部分。
(id是指数据库中每条记录的唯一标识,即id号。)
Uri uri = Uri.parse("content://cn.itcast.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);//获取的结果为:10