当我们在代码里需要构造一个uri的时候,建议的做法是通过Uri.Builder
来做,而不是简单的字符串拼接,因为常常简单的case字符串拼接是可以的,一旦涉及到复杂的、特殊字符需要url encode的就不能很好的work。今天要跟大家分享的是Uri.Builder的appendQueryParameter
方法,因为最近我们在这个方法上不小心翻车了。。。
我们有类似下面的代码:
boolean isFromH5 = callSomeMethod();
Uri.Builder builder = Uri.parse("mgj://xxx").buildUpon();
builder.appendQueryParameter("aaa", "111");
if (isFromH5) {
// 想把"111"替换成"222"!!!
builder.appendQueryParameter("aaa", "222");
}
String url = builder.toString();
System.out.println("url ============= " + url);
我们要做的是期望当isFromH5
成立的时候,能用新值“222”,替换掉同一个key的原始值“111”,当然这里的值都是举例说明而已。
但最终这段代码当isFromH5
成立的时候却没能让我们如愿,实际的结果是:
mgj://xxx?aaa=111&aaa=222
,并不是期望的mgj://xxx?aaa=222
。这一点还是挺让我们震惊的,但事后想想人家这方法既然叫append,确实是想just append,并不会判断key存不存在等等。
在这里总结分享下,大家有用到的注意下,避免踩坑咯。。。
网友评论