Javascript WebView中OnClick(HTML中的按钮)的活动中的触发器方法

Javascript WebView中OnClick(HTML中的按钮)的活动中的触发器方法,javascript,android,html,webview,onclick,Javascript,Android,Html,Webview,Onclick,我有一个显示本地HTML文件的WebView。在HTML中,我有一个硬编码的JavaScript函数。Onclick从一个按钮开始,也在该HTML文件中,函数将字符串传递到JavaScriptInterface。从那里,我想用这两个传递的字符串在我的活动中调用一个方法。这可能吗 我已经设置好了所有的东西,它正在工作,但是在活动中调用一个方法(从JSInterface中调用)只有在我将活动方法设置为static时才有效,当它设置为static时,我不能从static方法(从JSInterface触

我有一个显示本地HTML文件的WebView。在HTML中,我有一个硬编码的JavaScript函数。Onclick从一个按钮开始,也在该HTML文件中,函数将字符串传递到JavaScriptInterface。从那里,我想用这两个传递的字符串在我的活动中调用一个方法。这可能吗

我已经设置好了所有的东西,它正在工作,但是在活动中调用一个方法(从JSInterface中调用)只有在我将活动方法设置为static时才有效,当它设置为static时,我不能从static方法(从JSInterface触发)中调用活动中的其他方法

这是我的代码,希望你能帮助我:

public class JSWebAppInterface {
Context mContext;

/** Instantiate the interface and set the context */
JSWebAppInterface(Context c) {
    mContext = c;
}

@JavascriptInterface
public void sendData(String action, String filename){
    MbaiTextActivity.getDecision(action, filename);
}
}

}

在JSInterface类中,我在活动中调用了test():

    public void test(String one, String two){
    System.out.println("Aus der Test: " + one + " " + two);
    mwv.loadHTML(textsPath + "derBrax_part5.html");
}


04-18 08:01:23.248 17751-17891/com.example.max.mybai I/System.out: Aus der Test: Springen derBrax_part1.html
04-18 08:01:23.249 17751-17891/com.example.max.mybai W/WebView:java.lang.Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的活套活套(主,tid 1){76eeef3}调用活套(JavaBridge,tid 335){6f228eb},FYI主活套为活套(主,tid 1){76eeef3}) 位于android.webkit.WebView.checkThread(WebView.java:2334) 位于android.webkit.WebView.loadUrl(WebView.java:927) 在com.example.max.mybai.MbaiWebView.loadHTML(MbaiWebView.java:94)上 位于com.example.max.mybai.MbaiTextActivity$override.test(MbaiTextActivity.java:180) 位于com.example.max.mybai.MbaiTextActivity$override.access$dispatch(MbaiTextActivity.java) 位于com.example.max.mybai.MbaiTextActivity.test(MbaiTextActivity.java:0) 位于com.example.max.mybai.JSWebAppInterface.sendData(JSWebAppInterface.java:24) 位于org.chromium.base.SystemMessageHandler.NativeDorUnloponce(本机方法) 位于org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 运行(HandlerThread.java:61) 04-18 08:01:23.249 17751-17891/com.example.max.mybai W/System.err:java.lang.RuntimeException:java.lang.Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的活套活套(主,tid 1){76eeef3}调用活套(JavaBridge,tid 335){6f228eb},FYI主活套为活套(主,tid 1){76eeef3}) 04-18 08:01:23.249 17751-17891/com.example.max.mybai W/System.err:at-android.webkit.WebView.checkThread(WebView.java:2344) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at-android.webkit.WebView.loadUrl(WebView.java:927) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at com.example.max.mybai.MbaiWebView.loadHTML(MbaiWebView.java:94) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at com.example.max.mybai.MbaiTextActivity$override.test(MbaiTextActivity.java:180) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at com.example.max.mybai.MbaiTextActivity$override.access$dispatch(MbaiTextActivity.java) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at com.example.max.mybai.MbaiTextActivity.test(MbaiTextActivity.java:0) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at com.example.max.mybai.JSWebAppInterface.sendData(JSWebAppInterface.java:24) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at org.chromium.base.SystemMessageHandler.NativeDorUnloponce(本机方法) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:39) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:102) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at-android.os.Looper.loop(Looper.java:154) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at-android.os.HandlerThread.run(HandlerThread.java:61) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:原因:java.lang.Throwable:在线程“JavaBridge”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的活套活套(主,tid 1){76eeef3}调用活套(JavaBridge,tid 335){6f228eb},FYI主活套为活套(主,tid 1){76eeef3}) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:at-android.webkit.WebView.checkThread(WebView.java:2334) 04-18 08:01:23.250 17751-17891/com.example.max.mybai W/System.err:。。。还有11个 04-18 08:01:23.255 17751-17751/com.example.max.mybai I/chromium:[INFO:CONSOLE(19)]“未捕获错误:方法调用期间引发Java异常”,来源:file:///android_asset/books/der_brax/texts/derBrax_part1.html (19) 04-18 08:01:23.291 17751-17751/com.example.max.mybai W/art:尝试删除非JNI本地引用,转储线程
04-18 08:01:23.432 17751-17751/com.example.max.mybai W/art:尝试删除非JNI本地引用,转储线程

public void getDecision(String action, String filename){
    // just for test purpose
    System.out.println("Aus der TextAct.: " + filename + " " + action);
    // do soemthing
}

public class JSWebAppInterface {
    private final MbaiTextActivity act;

    /** Instantiate the interface and set the context */
    public JSWebAppInterface(MbaiTextActivity act) {
        this.act = act;
    }

    @JavascriptInterface
    public void sendData(String action, String filename){

        //EDIT:
        act.runOnUiThread(new Runnable() {

            @Override
            public void run () {

                 act.getDecision(action, filename);
            }
        });

    }
}

//in onCreate
mwv.addJavascriptInterface(new JSWebAppInterface(this), "android");

重写您的代码,如下所示:

public void getDecision(String action, String filename){
    // just for test purpose
    System.out.println("Aus der TextAct.: " + filename + " " + action);
    // do soemthing
}

public class JSWebAppInterface {
    private final MbaiTextActivity act;

    /** Instantiate the interface and set the context */
    public JSWebAppInterface(MbaiTextActivity act) {
        this.act = act;
    }

    @JavascriptInterface
    public void sendData(String action, String filename){

        //EDIT:
        act.runOnUiThread(new Runnable() {

            @Override
            public void run () {

                 act.getDecision(action, filename);
            }
        });

    }
}

//in onCreate
mwv.addJavascriptInterface(new JSWebAppInterface(this), "android");

成功了。适用于System.out.println b