在项目中遇到一个问题,在webveiw和原生之间进行传值的时候,出现了一些encode的小问题。看起来很简单的问题,实际上却存在不小的坑。
首先说一下目前项目的结构,在一个activity中,webview和原生之间有多种交互。
如图所示
在原生调用webview方法,这种协议已经非常常用了,直接调用loadJS();但是自定义协议这个过程,使用的拦截跳转的方式,按照预定的协议来解析数据,这里面就有一些情况,比如数据中出现了中文,webview会encode这部分内容,这就要求我们对拦截以后的内容进行decode。
见下方代码:
1 private String decodeUrl(String url) {
2 try {
3 return URLDecoder.decode(url, "utf-8");
4 } catch (UnsupportedEncodingException e) {
5 e.printStackTrace();
6 }
7 return "";
8 }
上面这段代码,看上去是很合理的,但是老司机们认真看看,这里面有坑。
首先看一下底层代码的decode。