Uri.Builder#appendQueryParameter

作者: tmp_zhao | 来源:发表于2017-05-26 17:52 被阅读268次

    当我们在代码里需要构造一个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存不存在等等。

    在这里总结分享下,大家有用到的注意下,避免踩坑咯。。。

    相关文章

      网友评论

      • jzhung:HTTP请求中是允许参数重名的,服务端接收到同名参数后封装到数组或集合里处理就行了。如果做过服务端开发这种情况还比较常见。
        jzhung:@tmp_zhao Get请求中多为幂等的查询请求,所以作为查询条件Query中重名字段不多见。Post请求表单域或者以Json方式传递的请求体同名参数很常见。
        tmp_zhao:即使允许一般也不推荐这样做吧。。。
      • Dream_Zurich:如果添加中文的话,生成的uri是乱码的,请指教解决方案。新手^_^
        tmp_zhao:@Dream_Zurich 对你的中文值执行URL编码即可。

      本文标题:Uri.Builder#appendQueryParameter

      本文链接:https://www.haomeiwen.com/subject/ycpxfxtx.html