返回顶部
首页 > 资讯 > 精选 >Android中的URI和Uri类有什么区别和联系
  • 319
分享到

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

2023-06-02 20:06:47 319人浏览 薄情痞子
摘要

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

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

一、URI与Uri

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

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

  • 所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需要。

  • 作用的不同。URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——UnifORM Resource Identifier)实例。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]  

其中有下面几个规则:

  • path可以有多个,每个用/连接,比如
    scheme://authority/path2/path3/path4?query#fragment

  • query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
    scheme://authority/path2/path3/path4?id = 1#fragment,这里有一个参数id,它的值是1

  • query参数可以有多个,每个用&连接
    scheme://authority/path2/path3/path4?id = 1&name = mingming&old#fragment
    这里有三个参数:
    参数1:id,其值是:1
    参数2:name,其值是:mingming
    参数3:old,没有对它赋值,所以它的值是null

  • 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
    其中"path"可不要:scheme://authority?query#fragment
    其中"path"和"query"可都不要:scheme://authority#fragment
    其中"query"和"fragment"可都不要:scheme://authority/path
    "path","query","fragment"都不要:scheme://authority
    等等……

(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  

  • scheme:匹对上面的两个Uri标准形式,很容易看出在:前的部分是scheme,所以这个Uri字符串的sheme是:http

  • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之间的部分,也就是包括第二部分的[//authority][path][?query]这几个小部分,所在这个Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要带上//,因为除了[scheme:]和[#fragment]部分全部都是scheme-specific-part,当然包括最前面的//;

  • fragment:这个是更容易看出的,因为在最后用#分隔的部分就是fragment,所以这个Uri的fragment是:harvic
    下面就是对scheme-specific-part进行拆分了;
    在scheme-specific-part中,最前端的部分就是authority,?后面的部分是query,中间的部分就是path

  • authority:很容易看出scheme-specific-part最新端的部分是:www.java2s.com:8080

  • query:在scheme-specific-part中,?后的部分为:stove=10&path=32&id=4

  • path:在**query:**在scheme-specific-part中,除了authority和query其余都是path的部分:/yourpath/fileName.htm
    又由于authority又一步可以划分为host:port形式,其中host:port用冒号分隔,冒号前的是host,冒号后的是port,所以:

  • host:www.java2s.com

  • port:8080

四、代码提取

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

[java] view plain copy

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

  • getScheme() :获取Uri中的scheme字符串部分,在这里即,http

  • getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?

  • getFragment():获取Uri中的Fragment部分,即harvic

  • getAuthority():获取Uri中Authority部分,即www.java2s.com:8080

  • getPath():获取Uri中path部分,即/yourpath/fileName.htm

  • getQuery():获取Uri中的query部分,即stove=10&path=32&id=4

  • getHost():获取Authority中的Host字符串,即www.java2s.com

  • getPost():获取Authority中的Port字符串,即8080

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

  • List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

[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类有什么区别和联系

  • getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

[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类有什么区别和联系”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Android中的URI和Uri类有什么区别和联系

本文链接: https://lsjlt.com/news/231195.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中的URI和Uri类有什么区别和联系
    本篇内容主要讲解“Android中的URI和Uri类有什么区别和联系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中的URI和Uri类有什么区别和联系”吧!一、URI与Uri大家可...
    99+
    2023-06-02
  • URL和URI之间有什么区别
    URL和URI之间的区别是:1、URI是用于标识互联网上的资源的字符串序列,而URI并不关注资源的位置,而只关注它的标识符;2、URL提供了关于资源在互联网上位置的详细信息,而URI是一种更广义的概念,不仅涵盖了URL,还包括了用于标识资源...
    99+
    2023-08-14
  • URI和URL的区别
    URI和URL的区别 一、什么是URI? URI(Uniform Resource Identifier)是指统一资源标识符,并且标识互联网上的字符串,对web的可用资源都是由资源标识符进行定位,用户通过标识对特定资源进行访问操作。 URI...
    99+
    2023-08-20
    服务器 网络 php
  • 编程语言中URL、URI和URN三者之间的区别是什么
    本篇内容主要讲解“编程语言中URL、URI和URN三者之间的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“编程语言中URL、URI和URN三者之间的区...
    99+
    2024-04-02
  • DNS和CDN有什么区别和联系
    本篇内容主要讲解“DNS和CDN有什么区别和联系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“DNS和CDN有什么区别和联系”吧!现在互联网用户很多不能理解CDN和DNS之间的关系,他们之间到底...
    99+
    2023-06-04
  • php和js有什么区别和联系
    区别:1、用途不同:php主要用于服务器端编程,而javascript主要用于客户端编程;2、执行环境不同:php代码在服务器端执行,而javascript代码在客户端浏览器中执行;3、...
    99+
    2024-04-02
  • sql与mysql有什么区别和联系
    下文主要给大家带来sql与mysql有什么区别和联系,希望这些内容能够带给大家实际用处,这也是我编辑sql与mysql有什么区别和联系这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。  &...
    99+
    2024-04-02
  • JVM、JRE、JDK有什么区别和联系
    这篇文章主要介绍“JVM、JRE、JDK有什么区别和联系”,在日常操作中,相信很多人在JVM、JRE、JDK有什么区别和联系问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JVM、JRE、JDK有什么区别和联系...
    99+
    2023-06-17
  • CSS中absolute与relative有什么区别和联系
    本文小编为大家详细介绍“CSS中absolute与relative有什么区别和联系”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS中absolute与relative有什么区别和联系”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-05
  • awk中RS、ORS、FS、OFS有什么区别和联系
    这篇文章主要讲解了“awk中RS、ORS、FS、OFS有什么区别和联系”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“awk中RS、ORS、FS、OFS有什么区别和联系”吧!学习awk时,一定...
    99+
    2023-06-09
  • C语言和C++有什么区别联系
    C语言和C++有什么区别联系?针对这个问题,今天小编总结了这篇文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。 C是一个结构化语言,它的重点在于bai算法和数据结构。C程序的设du计首要考虑zhi的是 如何通过一个过程,对输...
    99+
    2023-05-31
    c语言 c++ 区别联系
  • 公有云私有云的联系和区别是什么
    公有云和私有云都是云计算的服务模式,但它们的区别在于:1. 所有权:公有云是由第三方服务商提供的,多个用户共享同一组硬件和基础设施;...
    99+
    2023-06-17
    公有云私有云 公有云 私有云
  • Silverlight4和Flex4打印功能有什么区别和联系
    这篇文章主要为大家展示了“Silverlight4和Flex4打印功能有什么区别和联系”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Silverlight4和Flex4打印功能有什么区别和联系”...
    99+
    2023-06-17
  • Margin、Border、Padding属性有什么区别和联系
    这篇文章主要介绍了Margin、Border、Padding属性有什么区别和联系,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Margin属...
    99+
    2024-04-02
  • Oracle中User和Schema的区别和联系
    今天在阅读Oracle官方文档的时候,读到schema的基本概念,这就让我产生了一个疑问:user和schema两者之间到底有什么区别?为了更深层次的理解二者之间的区别和联系,以下是官方文档中关于us...
    99+
    2024-04-02
  • GO语言和Javascript中的对象同步:有什么区别和联系?
    随着计算机科学的发展,越来越多的编程语言被开发出来。其中,GO语言和Javascript都是非常流行的编程语言。在这两种语言中,对象同步是一个非常重要的话题。在本文中,我们将讨论GO语言和Javascript中的对象同步,比较它们之间的区别...
    99+
    2023-09-15
    对象 同步 javascript
  • javaSE中的==和equals的联系与区别是什么
    本篇内容主要讲解“javaSE中的==和equals的联系与区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javaSE中的==和equals的联系与区别是什么”吧!问题这里先抛出一些比...
    99+
    2023-06-16
  • Android中bindservice和startservice有什么区别
    在Android中,bindService()和startService()是两个用于启动服务的方法,它们在功能和使用方式上有一些区...
    99+
    2024-02-29
    Android
  • java和android有什么区别?
    Android和JAVA区别:Android是主流智能手机的操作系统,JAVA是一种开发语言,两者没有好坏优势之分,只是两种职业岗位选择,学安卓从事移动互联方向开发,学JAVA从事软件方向开发,主要看个人选择,从学JAVA转移到安卓,学安卓...
    99+
    2020-09-26
    java教程 java android
  • unix和linux的区别与联系是什么
    这篇文章主要介绍“unix和linux的区别与联系是什么”,在日常操作中,相信很多人在unix和linux的区别与联系是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”unix和linux的区别与联系是什么...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作