安卓学习笔记——URI

一、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树的根节点
  1. public UriMatcher():默认根节点编码为-1;
  2. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值