Uri说明

关于android.net.Uri的说明。

官方注释

/**
 * Immutable URI reference. A URI reference includes a URI and a fragment, the
 * component of the URI following a '#'. Builds and parses URI references
 * which conform to
 * <a href="http://www.faqs.org/rfcs/rfc2396.html">RFC 2396</a>.
 *
 * <p>In the interest of performance, this class performs little to no
 * validation. Behavior is undefined for invalid input. This class is very
 * forgiving--in the face of invalid input, it will return garbage
 * rather than throw an exception unless otherwise specified.
 */

Uri的组成

官方描述格式如下
<scheme>://<authority><absolute path>?<query>#<fragment>


Uri主要分四个部分:schemeauthoritypathquery

其中authority又包括hostport


这边我们设置如下格式
scheme://host:8080/path1/path2/path?query1=123&query2=test

这边对应如下

格式 字段说明
scheme scheme,在://之前的全部字符串
authority host:8080,在://之后到到第一次出现 /?#之间的字符串
path /path1/path2/path,在authority之后开始算碰到?#之间的字符串
query query1=123&query2=test,?之后到#之间的字符串

注意:#不一定存在,这段格式就没有#


Uri常用方法说明

首先说下,对于大部分方法都会存在一个getXXXXgetEncodedXXXX就是字面的意思一个是encoded的一个是decoded的!

那么就开始说明常用的几个方法

方法 说明
String getScheme() 获取scheme字符串
String getSchemeSpecificPart() 获取scheme之后的全部字符串
String getAuthority() 获取authority
String getHost() 获取host
String getPort() 获取port
String getPath() 获取整段path字符串
String getPathSegments() 获取每个path的字符串
String getLastPathSegment() 获取最后一个path的字符串
String getQuery() 获取整段query字符串
String getQueryParameterNames() 获取每个query的key字符串
String getQueryParameter(String key) 按照对应的query中key的值

以上格式输出代码使用

        Uri uri = Uri.parse("scheme://host:8080/path1/path2/path?query1=123&query2=test");
        Log.e("-s-", String.valueOf(uri));

        String scheme = uri.getScheme();
        String specificPart = uri.getSchemeSpecificPart();

        String authority = uri.getAuthority();
        String host = uri.getHost();
        int port = uri.getPort();


        String path = uri.getPath();
        List<String> pathSegments =uri.getPathSegments();
        String last = uri.getLastPathSegment();

        String query = uri.getQuery();
        Set<String> parmeterNames = uri.getQueryParameterNames();

        Log.e("-s-", "scheme = " + scheme);
        Log.e("-s-", "specificPart = " + specificPart);

        Log.e("-s-", "authority = " + authority);
        Log.e("-s-", "host = " + host);
        Log.e("-s-", "port = " + port);


        Log.e("-s-", "path = " + path);
        for (String pathSegment : pathSegments) {
            Log.e("-s-", "pathSegment = " + pathSegment);
        }
        Log.e("-s-", "last = " + last);

        Log.e("-s-", "query = " + query);
        for (String parmeterName : parmeterNames) {
            Log.e("-s-", parmeterName + " = " + uri.getQueryParameter(parmeterName));
        }

打印结果如下

E/-s-: scheme://host:8080/path1/path2/path?query1=123&query2=test

E/-s-: scheme = scheme
E/-s-: specificPart = //host:8080/path1/path2/path?query1=123&query2=test

E/-s-: authority = host:8080
E/-s-: host = host
E/-s-: port = 8080

E/-s-: path = /path1/path2/path
E/-s-: pathSegment = path1
E/-s-: pathSegment = path2
E/-s-: pathSegment = path
E/-s-: last = path

E/-s-: query = query1=123&query2=test
E/-s-: query1 = 123
E/-s-: query2 = test

总结

一篇关于Uri的总结说明

参照资料
android.net.Uri 简介

猜你喜欢

转载自blog.csdn.net/g777520/article/details/79700368
URI