WebView是Android开发中常用的组件之一,用来加载网页数据,可以直接传入URL,也可以传入Html格式字符等。并且我们可以通过WebView中相关方法对加载的内容进行处理,如js交互,获取加载的网页链接地址信息等。今天在开发中遇到一个小功能,就是要用WebView来加载一个网页数据,网页中有很多商品,点某一商品又可进入到App中的商品详情页面,主要方法就是通过WebViewClient中的shouldOverrideUrlLoading(WebView view, String url)方法获取url特定信息并进行处理。比如,我要截取特定字符中的一部分数据,处理方法如下:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
((CustomWebView) view).resetLoadedUrl();
if(url != null ){
if(url.contains("?method=search¶meter=")){//比如要判断url中是否包括"?method=search¶meter="字符,就截取获取"?method=search¶meter="后面的文字
int length = "?method=search¶meter=".length();
int index = url.indexOf("?method=search¶meter=");
url = URLDecoder.decode(url);//数据转码
String keyWord = url.substring(index+length);//截取操作
Bundle bundle = new Bundle();
bundle.putString("categoryName", keyWord);
mMainActivity.showActivity(activity, XX.class,bundle);//把截取到的数据传入到指定页面中
return true;
}else
//TODO
return true;
}
}
return false;
}
开始没有加入上面红色文字,结果截取到的字符是一串由%和字母等组成的一长串字符,并非我想要的中文汉字,后来加入红色文字,就获取到了想要的字符,如“联想电脑”。
今天查了下java的api,了解了一下URLDecoder这个类:
HTML 格式解码的实用工具类。该类包含了将 String 从 application/x-www-form-urlencoded
MIME 格式解码的静态方法。
该转换过程正好与 URLEncoder 类使用的过程相反。假定已编码的字符串中的所有字符为下列之一:"a
" 到 "z
"、"A
" 到 "Z
"、"0
" 到 "9
" 和 "-
"、"_
"、".
" 以及 "*
"。允许有 "%
" 字符,但是将它解释为特殊转义序列的开始。
转换中使用以下规则:
a
" 到 "z
"、"A
" 到 "Z
" 和 "0
" 到 "9
" 保持不变。 .
"、"-
"、"*
" 和 "_
" 保持不变。 +
" 转换为空格字符 "
"。 %xy
" 格式序列视为一个字节,其中 xy 为 8 位的两位十六进制表示形式。然后,所有连续包含一个或多个这些字节序列的子字符串,将被其编码可生成这些连续字节的字符所代替。可以指定对这些字符进行解码的编码机制,或者如果未指定的话,则使用平台的默认编码机制。 该解码器处理非法字符串有两种可能的方法。一种方法是不管该非法字符,另一种方法是抛出 IllegalArgumentException
异常。解码器具体采用哪种方法取决于实现。现在主要用的方法是:
decode(String s, String enc) 使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。解码后才能获取到我们想要的正确数据。
与URLDecoder的类是URLEncoder:该类包含了将 String 转换为 application/x-www-form-urlencoded
MIME 格式。主要方法:encode(String s, String enc) 使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。
下次遇到这样的问题就知道怎么解决了。