LotusLoveNature

日常工作,生活小记

Uri decode encode

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

评论
©LotusLoveNature | Powered by LOFTER