Android中的URI和Uri类有什么区别和联系

发布时间:2021-09-14 08:53:04 作者:chen
来源:亿速云 阅读:122

本篇内容主要讲解“Android中的URI和Uri类有什么区别和联系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中的URI和Uri类有什么区别和联系”吧!

一、URI与Uri

大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?

名称如此相像的两个类是有什么区别和联系?

看不懂?没关系,知道这个就可以了:Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

二、Uri结构

(1)、基本形式:

[html]  view plain  copy

  1. [scheme:]scheme-specific-part[#fragment]  

这里分为三部分:
scheme、scheme-specific-part、fragment

(2)、进一步划分:

如果进一步划分的话是这样子的

[html]  view plain  copy

  1. [scheme:][//authority][path][?query][#fragment]  

其中有下面几个规则:

(3)、终极划分

其中authority,又可以分为host:port的形式,即再次划分后是这样的:

[html]  view plain  copy

  1. [scheme:][//host:port][path][?query][#fragment]  

所以这是划分最细的形式,其中host:port用冒号分隔,冒号前的是host,冒号后的port;

三、示例

经过上面的讲解,想必大家的Uri的结构就有所了解了,下面我们就实例看看各部分的识别方式。

[html]  view plain  copy

  1. [scheme:]scheme-specific-part[#fragment]  

  2. [scheme:][//authority][path][?query][#fragment]  

  3. [scheme:][//host:port][path][?query][#fragment]  

先列出这三种Uri形式,好让大家对比;
针对下面一个Uri字符串来匹配一下各个部分:

[java]  view plain  copy

  1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  

四、代码提取

上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

[java]  view plain  copy

  1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  

另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

[java]  view plain  copy

  1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";  

  2. Uri mUri = Uri.parse(mUriStr);  

  3. List<String> pathSegList = mUri.getPathSegments();  

  4. for (String pathItem:pathSegList){  

  5.     Log.d("qijian","pathSegItem:"+pathItem);  

  6. }  

打出来的列表为:
Android中的URI和Uri类有什么区别和联系

[java]  view plain  copy

  1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";  

  2. mUri = Uri.parse(mUriStr);  

  3. Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));  

  4. Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));  

注意注意,我稍微更改了下字符串,把query中id的值去掉了!!!!!然后看看通过getQueryParameter("id")获取它的值会得到什么!
结果如下:
Android中的URI和Uri类有什么区别和联系

可以看到,在path中,即使针对某一个KEY不对它赋值是允许的,但在利用getQueryParameter()获取该KEY对应的值时,获取到的是null;

五、扩展

1、 绝对URI和相对URI

绝对URI:以scheme组件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以对标识出现的环境无依赖的方式引用资源。 
相对URI:不以scheme组件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以对依赖标识出现的环境有依赖的方式引用资源。 

2、不透明URI和分层URI

不透明URI:scheme-specific-part组件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI无需进行分解操作,因此不会对scheme-specific-part组件进行有效性验证。 
分层URI:scheme-specific-part组件是以正斜杠(/)起始的,如http://fsjohnhuang.com。

到此,相信大家对“Android中的URI和Uri类有什么区别和联系”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. C#中Uri操作
  2. URL和URI之间的区别有什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android

上一篇:css3 2D图片转动样式实例代码

下一篇:Flex中定义和使用渲染器的方式

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》