DSBridge-Android icon indicating copy to clipboard operation
DSBridge-Android copied to clipboard

页面返回提示The parameter of "dsinit" in java is invalid

Open xyato opened this issue 6 years ago • 8 comments

我打开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直接报空指针异常
    }

xyato avatar Dec 29 '18 04:12 xyato

同遇到这个问题 ,之前都好好的,最近就出现这个问题了

answer33 avatar Jan 15 '19 02:01 answer33

这个问题很严重,出现的频率很高,4月份说修复了,为什么现在又出现了呢

FisherWu29 avatar Jan 16 '19 09:01 FisherWu29

不是出现的频率很高,是必现!我已经贴出有问题的代码了还有复现步骤,作者怎么不给个答复呢,是太忙了吗,都过去那么多天了。

xyato avatar Jan 18 '19 03:01 xyato

同问,必现

jobin-sun avatar Aug 03 '19 02:08 jobin-sun

首先感谢作者,这个框架挺不错的,虽然很久没有维护了,我也遇到了楼上的问题,addJavascriptObject中如果有UI操作,就会出现这个问题,我的方案是用的EventBus来解决的,希望帮到大家。

tyf221578 avatar Sep 10 '19 10:09 tyf221578

终于找到原因了,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操作
        }
     });
  }
}

tyf221578 avatar Sep 12 '19 06:09 tyf221578

我打开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) 这样就行了

wqandroid avatar Sep 11 '21 03:09 wqandroid