关于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主要分四个部分:scheme
、authority
、path
、query
。
其中authority
又包括host
、port
。
这边我们设置如下格式
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常用方法说明
首先说下,对于大部分方法都会存在一个getXXXX
和getEncodedXXXX
就是字面的意思一个是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 简介