Android 与Js通信报Java Exception was raised during method Invocation错误
Java Exception was raised during method Invocation
Android 与js 交互报错
今日稿件为项目开发中实际遇到的问题,在此记录!
首先js调取Android 我们需要知道以下几点:
@SuppressLint("JavascriptInterface")
@JavascriptInterface
其次 Android 调取Js代码,这里我封装了一个工具方法:
androidToJs
/**
* @param jsCallbackFunc js 中的方法名
* @param values 传给js的参数
*/
public void androidToJs(final String jsCallbackFunc, String... values) {
if (values == null) {
String jsCode = "javascript:" + jsCallbackFunc + "()";
sonicSessionClient.getWebView().loadUrl(jsCode);
} else {
StringBuffer buffer = new StringBuffer();
buffer.append("javascript:" + jsCallbackFunc + "(");
for (int i = 0; i < values.length; i++) {
buffer.append("'" + values[i] + "'");
if (i + 1 < values.length) {
buffer.append(",");
}
}
buffer.append(")");
WebView.loadUrl(buffer.toString());
}
}
一切都正确,可是在Android 调取js突然报错Java Exception was raised during method Invocation!尴尬。这一切是怎么回事?通过一些列定位排查,最终我把我的想法抛在了线程上,是不是我的Android调取js没有在Android主线程呢?于是我劈里啪啦的写上Handler ,通过Handler来实现主线程调取JS方法!一切成功了!
handler 开始调取js数据
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1){
androidToJs("app_user_pda","jsStringBean");
}
}
};
通过发送消息,通知handler做事情
Message message = mHandler.obtainMessage();
message.what = 1;
mHandler.sendMessage(message);