欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

URI和URL

程序员文章站 2024-02-14 22:50:28
...

一、URI和URL的区别:

1、URI:统一资源标识符,用来唯一的识别一个资源,包含URL和URN。Uri时Android开发的,扩展了JAVA的URI的一些功能来特定的适用于Android开发。
2、URL:统一资源定位符,是一种具体的URI,也就是URL可以用来识别一个资源,还指明了如何定位一个资源。

二、URI的使用:

1、基本形式:http://www.baidu.com/artical.....
[scheme:][//authority][path][?query][#fragment]
①path:可以有多个,每个用/连接;
②query参数可以带有对应的值,用&连接,也可以不带
③ 在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:是在?后面的部分的键值对: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
⑦还有两个特别常用的: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()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

5、使用getQueryParameterNames(),将键值对存入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;

}