【www.bbyears.com--word】
在cnblogs的android客户端开中使用webview模拟登录,这样就需要将用户输入的用户名和密码传到webview上然后提交,这个过程在mx3的flyme3和flyme4上测试一切正常,然而在我的htcG12上(用的miui4),和三星note2上都报错。
报错的代码为:
代码如下
public void LoginByPassword(String username, String password){
mCurrentRT = EnumRequestType.LoginFinish;
final String strJS = String.format("javascript:document.getElementById("tbUserName").value="%s";document.getElementById("tbPassword").value="%s";document.getElementById("form1").submit();", username, password);
mWeb.post(new Runnable() {
public void run() {
mWeb.loadUrl(strJS);
}
});
}
mWeb.loadUrl(strJS);时报错了,报错的内容为“android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application”。
解决办法,是对mWeb的settings进行设置不保存密码“settings.setSavePassword(false);”代码如下:
代码如下 @SuppressLint({ "SetJavaScriptEnabled"})
private void initialWeb(){
WebSettings settings = mWeb.getSettings();
settings.setSavePassword(false);
settings.setSaveFormData(false);
settings.setJavaScriptEnabled(true);
settings.setBlockNetworkImage(true);
mWeb.addJavascriptInterface(new JSInterface(), "IFObj");
mWeb.setWebViewClient(mBlogWebClient);
}
就此,原因找到了,不过“Unable to add window -- token null is not for an application”的错误,并不都是这个导致的。