欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android中的URI和Uri類有什么區(qū)別和聯(lián)系-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Android中的URI和Uri類有什么區(qū)別和聯(lián)系”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Android中的URI和Uri類有什么區(qū)別和聯(lián)系”吧!

創(chuàng)新互聯(lián)長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為多倫企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)多倫網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一、URI與Uri

大家可能經(jīng)常會(huì)看到在開發(fā)時(shí),怎么有的時(shí)候是URI,有的時(shí)候是Uri,這是怎么回事?

名稱如此相像的兩個(gè)類是有什么區(qū)別和聯(lián)系?

  • 1.所屬的包不同。URI位置在java.net.URI,顯然是Java提供的一個(gè)類。而Uri位置在android.net.Uri,是由Android提供的一個(gè)類。所以初步可以判斷,Uri是URI的“擴(kuò)展”以適應(yīng)Android系統(tǒng)的需要。

  • 2.作用的不同。URI類代表了一個(gè)URI(這個(gè)URI不是類,而是其本來的意義:通用資源標(biāo)志符——Uniform Resource Identifier)實(shí)例。Uri類是一個(gè)不可改變的URI引用,包括一個(gè)URI和一些碎片,URI跟在“#”后面。建立并且轉(zhuǎn)換URI引用。而且Uri類對(duì)無效的行為不敏感,對(duì)于無效的輸入沒有定義相應(yīng)的行為,如果沒有另外制定,它將返回垃圾而不是拋出一個(gè)異常。

看不懂?沒關(guān)系,知道這個(gè)就可以了:Uri是Android開發(fā)的,擴(kuò)展了JAVA中URI的一些功能來特定的適用于Android開發(fā),所以大家在開發(fā)時(shí),只使用Android 提供的Uri即可;

二、Uri結(jié)構(gòu)

(1)、基本形式:

[html]  view plain  copy

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

這里分為三部分:
scheme、scheme-specific-part、fragment

(2)、進(jìn)一步劃分:

如果進(jìn)一步劃分的話是這樣子的

[html]  view plain  copy

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

其中有下面幾個(gè)規(guī)則:

  • path可以有多個(gè),每個(gè)用/連接,比如
    scheme://authority/path2/path3/path4?query#fragment

  • query參數(shù)可以帶有對(duì)應(yīng)的值,也可以不帶,如果帶對(duì)應(yīng)的值用=表示,如:
    scheme://authority/path2/path3/path4?id = 1#fragment,這里有一個(gè)參數(shù)id,它的值是1

  • query參數(shù)可以有多個(gè),每個(gè)用&連接
    scheme://authority/path2/path3/path4?id = 1&name = mingming&old#fragment
    這里有三個(gè)參數(shù):
    參數(shù)1:id,其值是:1
    參數(shù)2:name,其值是:mingming
    參數(shù)3:old,沒有對(duì)它賦值,所以它的值是null

  • 在android中,除了scheme、authority是必須要有的,其它的幾個(gè)path、query、fragment,它們每一個(gè)可以選擇性的要或不要,但順序不能變,比如:
    其中"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]  

所以這是劃分最細(xì)的形式,其中host:port用冒號(hào)分隔,冒號(hào)前的是host,冒號(hào)后的port;

三、示例

經(jīng)過上面的講解,想必大家的Uri的結(jié)構(gòu)就有所了解了,下面我們就實(shí)例看看各部分的識(shí)別方式。

[html]  view plain  copy

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

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

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

先列出這三種Uri形式,好讓大家對(duì)比;
針對(duì)下面一個(gè)Uri字符串來匹配一下各個(gè)部分:

[java]  view plain  copy

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

  • scheme:匹對(duì)上面的兩個(gè)Uri標(biāo)準(zhǔn)形式,很容易看出在:前的部分是scheme,所以這個(gè)Uri字符串的sheme是:http

  • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之間的部分,也就是包括第二部分的[//authority][path][?query]這幾個(gè)小部分,所在這個(gè)Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要帶上//,因?yàn)槌薣scheme:]和[#fragment]部分全部都是scheme-specific-part,當(dāng)然包括最前面的//;

  • fragment:這個(gè)是更容易看出的,因?yàn)樵谧詈笥?分隔的部分就是fragment,所以這個(gè)Uri的fragment是:harvic
    下面就是對(duì)scheme-specific-part進(jìn)行拆分了;
    在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用冒號(hào)分隔,冒號(hào)前的是host,冒號(hào)后的是port,所以:

  • host:www.java2s.com

  • port:8080

四、代碼提取

上面我們通過實(shí)例講解了肉眼識(shí)別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

另外還有兩個(gè)常用的:getPathSegments()、getQueryParameter(String key)

  • List< String> getPathSegments():上面我們的getPath()是把path部分整個(gè)獲取下來:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各個(gè)部分的字符串,以字符串?dāng)?shù)組的形式輸出。以上面的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類有什么區(qū)別和聯(lián)系

  • getQueryParameter(String key):在上面我們通過getQuery()獲取整個(gè)query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通過傳進(jìn)去path中某個(gè)Key的字符串,返回他對(duì)應(yīng)的值。

[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")獲取它的值會(huì)得到什么!
結(jié)果如下:
Android中的URI和Uri類有什么區(qū)別和聯(lián)系

可以看到,在path中,即使針對(duì)某一個(gè)KEY不對(duì)它賦值是允許的,但在利用getQueryParameter()獲取該KEY對(duì)應(yīng)的值時(shí),獲取到的是null;

五、擴(kuò)展

1、 絕對(duì)URI和相對(duì)URI

絕對(duì)URI:以scheme組件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以對(duì)標(biāo)識(shí)出現(xiàn)的環(huán)境無依賴的方式引用資源。 
相對(duì)URI:不以scheme組件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以對(duì)依賴標(biāo)識(shí)出現(xiàn)的環(huán)境有依賴的方式引用資源。 

2、不透明URI和分層URI

不透明URI:scheme-specific-part組件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI無需進(jìn)行分解操作,因此不會(huì)對(duì)scheme-specific-part組件進(jìn)行有效性驗(yàn)證。 
分層URI:scheme-specific-part組件是以正斜杠(/)起始的,如http://fsjohnhuang.com。

到此,相信大家對(duì)“Android中的URI和Uri類有什么區(qū)別和聯(lián)系”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章題目:Android中的URI和Uri類有什么區(qū)別和聯(lián)系-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://www.chinadenli.net/article0/dcccoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷關(guān)鍵詞優(yōu)化網(wǎng)站設(shè)計(jì)外貿(mào)網(wǎng)站建設(shè)商城網(wǎng)站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)