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

这边对应如下

格式字段说明
schemescheme,在://之前的全部字符串
authorityhost:8080,在://之后到到第一次出现 /?#之间的字符串
path/path1/path2/path,在authority之后开始算碰到?#之间的字符串
queryquery1=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 简介

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值