页面返回提示The parameter of "dsinit" in java is invalid
我打开A页面,然后A页面跳转B页面,然后从B页面返回A页面提示The parameter of "dsinit" in java is invalid。返回调用的是webview的goback方法 我查看了代码,如下代码存在问题
private synchronized void dispatchStartupQueue() {
Iterator var1 = this.callInfoList.iterator(); // callInfoList使用过一次之后后面就被置null了
while(var1.hasNext()) {
DWebView.CallInfo info = (DWebView.CallInfo)var1.next();
this.dispatchJavascriptCall(info);
}
this.callInfoList = null; /// 这里被置空,导致第二次dsinit调用dispatchStartupQueue直接报空指针异常
}
同遇到这个问题 ,之前都好好的,最近就出现这个问题了
这个问题很严重,出现的频率很高,4月份说修复了,为什么现在又出现了呢
不是出现的频率很高,是必现!我已经贴出有问题的代码了还有复现步骤,作者怎么不给个答复呢,是太忙了吗,都过去那么多天了。
同问,必现
首先感谢作者,这个框架挺不错的,虽然很久没有维护了,我也遇到了楼上的问题,addJavascriptObject中如果有UI操作,就会出现这个问题,我的方案是用的EventBus来解决的,希望帮到大家。
终于找到原因了,JavascriptInterface是在子线程中执行的,如果有UI操作必须返回主线程。
public class JsApi {
private Activity act;
JsApi(Activity act) {
this.act = act;
}
/**
* app返回前页
*/
@JavascriptInterface
public void AppDoBack(Object data, CompletionHandler<String> handler) {
Gson gson = new Gson();
JsonObject dt = gson.fromJson(data.toString(), JsonObject.class);
new Handler(this.act.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//执行UI操作
}
});
}
}
我打开A页面,然后A页面跳转B页面,然后从B页面返回A页面提示The parameter of "dsinit" in java is invalid。返回调用的是webview的goback方法 我查看了代码,如下代码存在问题
private synchronized void dispatchStartupQueue() { Iterator var1 = this.callInfoList.iterator(); // callInfoList使用过一次之后后面就被置null了 while(var1.hasNext()) { DWebView.CallInfo info = (DWebView.CallInfo)var1.next(); this.dispatchJavascriptCall(info); } this.callInfoList = null; /// 这里被置空,导致第二次dsinit调用dispatchStartupQueue直接报空指针异常 }
setWebContentsDebuggingEnabled(false) 这样就行了