一扣溺、URI和URL的區(qū)別:
1、URI:統(tǒng)一資源標(biāo)識(shí)符瓜晤,用來唯一的識(shí)別一個(gè)資源锥余,包含URL和URN。Uri時(shí)Android開發(fā)的痢掠,擴(kuò)展了JAVA的URI的一些功能來特定的適用于Android開發(fā)驱犹。
2嘲恍、URL:統(tǒng)一資源定位符,是一種具體的URI着绷,也就是URL可以用來識(shí)別一個(gè)資源蛔钙,還指明了如何定位一個(gè)資源。
二荠医、URI的使用:
1吁脱、基本形式:http://www.baidu.com/artical.....
[scheme:][//authority][path][?query][#fragment]
①path:可以有多個(gè),每個(gè)用/連接彬向;
②query參數(shù)可以帶有對(duì)應(yīng)的值兼贡,用&連接,也可以不帶
③ 在Android中娃胆,schema,authority是必須要有的遍希,但是parh,query等是選擇性的。
2里烦、終極劃分:
[scheme:][//host:port][path][?query][#fragment]
3凿蒜、舉例:
http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
①scheme:http
②host:www.java2s.com
③port:8080
④query:是在?后面的部分的鍵值對(duì):stove=10&path=32&id=4
⑤authority:包含host和port:www.java2s.com:8080
⑥fragment:在最后用#分隔的部分,harvic
4胁黑、代碼的提确戏狻:
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?
③getAuthority:獲取Uri中的Authority中的部分漂洋,即www.java2s.com:8080
④getQuery:獲取Uri中的query的部分:即stove=10&path=32&id=4
⑤getHost:獲取Authority中的host部分,即www.java2s.com
⑥getPort:獲取Authoruty中的Port部分力喷,即8080
⑦還有兩個(gè)特別常用的:List<String> getPathSegments():
String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";
Uri mUri = Uri.parse(mUriStr);
List<String> pathSegList = mUri.getPathSegments();
for (String pathItem:pathSegList){
Log.d("qijian","pathSegItem:"+pathItem);
}
以上分別打印出yourpath和fileName.htm
⑧getQueryParameter(String key):在上面我們通過getQuery()獲取整個(gè)query字段:stove=10&path=32&id=4刽漂,getQueryParameter(String key)作用就是通過傳進(jìn)去path中某個(gè)Key的字符串,返回他對(duì)應(yīng)的值弟孟。
5贝咙、使用getQueryParameterNames(),將鍵值對(duì)存入hashMap:
public static Map<String, String> getAndroidParamsByLinkUrl(String url) {
Map<String, String> params = new HashMap<>();
if (isLegallUrl(url)) {
String androidRouterUrl = extractAndroidRouterUrl(url);
if (!TextUtils.isEmpty(androidRouterUrl)) {
Uri uri = Uri.parse(FAKE_HEADER + androidRouterUrl);
for (String item : uri.getQueryParameterNames()) {
params.put(item, uri.getQueryParameter(item));
}
}
}
return params;
}