act通过uri传递参数

我们经常需要在启动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都可以正确的解析出来了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,778评论 0 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,660评论 25 709
  • 当MySQL服务器本身遇到性能问题的时候,一般可以通过slow log来找到耗时比较多的SQL语句,并且进一步通过...
    MySQLLearning阅读 3,848评论 0 2
  • 这次桐庐之旅可谓印象深刻、有惊无险啊!开车到桐庐百岁峡漂流,天气晴好,百岁峡应该算桐庐三个漂流点最不刺激的点,不过...
    飕飗阅读 2,444评论 0 1
  • 金宣宗泰和五年秋,这天临近傍晚,一辆马车缓缓行驶在前往并州的官道上,赶车的看起来像是大户人家的仆从。听他道:“少爷...
    230cd5735bfb阅读 7,338评论 0 3