act通过uri传递参数

作者: tmp_zhao | 来源:发表于2016-08-29 17:54 被阅读383次

    我们经常需要在启动act的时候传递某些参数,这时一般有2种做法:

    1. 通过Intent暴露的各种putXXX方法;
    2. 通过Uri(Intent.getData())param传递;

    大部分情况下,我们都会选择第1种方式,偶尔某些数据量很小、轻量级的情况下,可能也会选择第2种方式,但是在使用第2种方式时还是有问题要特别注意下,即url编码问题。

    你通过第2种方式绝大多数情况下也都是ok的,但当你用它来传递的某些值里含有特殊字符时,这时解析就会出错,比如像这样“mgj://payresult?textcolor=#ff0000&money=100.85元”
    你期望能解析出textcolor=#ff0000money=100.85元,可是由于特殊字符#的存在,你的解析会失败!
    代码如下:

    String urlParam = "mgj://payresult?textcolor=#ff0000&money=100.85元";
    Uri uri = Uri.parse(urlParam);
    String textcolor = uri.getQueryParameter("textcolor");
    String money = uri.getQueryParameter("money");
    System.out.println("textcolor = " + textcolor + ", money = " + money);
    

    出问题的原因是,url中key=value这样的键值对没有进行url编码,正确的做法应该如下:

    Uri.Builder builder = Uri.parse("mgj://payresult").buildUpon();
    builder.appendQueryParameter("textcolor", "#ff0000");
    builder.appendQueryParameter("money", "100.85元");
    String urlParam = builder.toString();
    Uri uri = Uri.parse(urlParam);
    String textcolor = uri.getQueryParameter("textcolor");
    String money = uri.getQueryParameter("money");
    System.out.println("textcolor = " + textcolor + ", money = " + money);
    

    至此,2组key、value都可以正确的解析出来了。

    相关文章

      网友评论

        本文标题:act通过uri传递参数

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