Android知识Android开发Android技术知识

act通过uri传递参数

2016-08-29  本文已影响383人  tmp_zhao

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

上一篇 下一篇

猜你喜欢

热点阅读