Uri的方法
encode:将string编码,会将“:”“/”"?""#"等特殊符号按照特定规则编码。这样做的可能是系统需要,比如下面要说的数据分段
decode:将数据解码,和encode是对应的
parse:可以将string转化成Uri,其实就是封装了一层,为了特定的逻辑
getPathSegments:返回List<string>可以根据“/”来获取数据段,前提是这个Uri中没有除了“/”之外其他的特殊符号
比如这里想包装id和url。可以这样
String url = "//www.baidu.com:ee?egs#f";
url = Uri.encode(url);
Uri uri = Uri.parse(id + "/" + url);
这样可以传参了,android里面有很多地方默认传参就是Uri,比如intent的data
然后解包的时候调用uri.getPathSegments就可以获取出两笔数据
Uri正常的用法
格式
scheme:/ssp #fragment
Uri partsUri = Uri.fromParts("scheme", "ssp", "fragment");
Log.d("cdd", "parts url=" + partsUri.toString());
Uri appendUri = Uri.withAppendedPath(partsUri, "addsegment");
Log.d("cdd", "append url=" + appendUri.toString());
得到的结果:
parts url= scheme:ssp#fragment
append url= scheme:/addsegment#fragment
withAppendedPath方法用的较多,就是加上"/"后面的逻辑,如果发现原来base没有按规则,可能不会保留原string
比如正常的:
Uri baseUri = Uri.parse("content://" + "com.cdd.test");
baseUri = Uri.withAppendedPath(baseUri, "images");
得到的是:content://com.cdd.test/images
异常的是:
Uri baseUri = Uri.parse("content:" + "com.cdd.test");
baseUri = Uri.withAppendedPath(baseUri, "images");
得到是:content:/images