无法从webview android中从Javascript调用的Java方法获取数据

无法从webview android中从Javascript调用的Java方法获取数据,java,javascript,android,webview,Java,Javascript,Android,Webview,我正在开发一个应用程序,当我在webview中单击一个链接并期望从该方法得到结果时,我会执行一个Java方法。在该方法中,我使用startActivityForResult启动另一个活动,该方法运行良好(我在该活动上放置了一些日志,一切都很好),但该方法似乎没有返回任何内容 这是我的密码: HTML:(所有包含内容都可以) <script type="text/javascript"> $("#run-qrscan").on("click", function(){

我正在开发一个应用程序,当我在webview中单击一个链接并期望从该方法得到结果时,我会执行一个Java方法。在该方法中,我使用
startActivityForResult
启动另一个活动,该方法运行良好(我在该活动上放置了一些日志,一切都很好),但该方法似乎没有返回任何内容

这是我的密码:

HTML:(所有包含内容都可以)

<script type="text/javascript">
    $("#run-qrscan").on("click", function(){

        var qr_data = window.WebAppInterface.startScan(); 
        // startScan is the Java method I call
        // call the function opens the activity etc.. but doesn't get any result 

        $("#display-qrresult").html(qr_data); // doesn't display anything
    });
</script>
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web);

    WebView webview = (WebView) findViewById(R.id.aw_webView);

    WebAppInterface jsInterface = new WebAppInterface(this);
    webview.getSettings().setJavaScriptEnabled(true);

    webview.setWebChromeClient(new WebChromeClient());

    webview.addJavascriptInterface(jsInterface, "WebAppInterface");
    webview.loadUrl("file:///android_asset/index.html");
}
我的Javascript接口:WebAppInterface.java

import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.webkit.JavascriptInterface;

public class WebAppInterface {

    private static Activity activity;
    public static int WEB_APP = 0;

    private static int REQUEST_FOR_ACTIVITY_CODE_SCAN = 1000;
    private static String qr_data = "";
    private static Intent intent;

    public WebAppInterface(Activity activity) {
        WebAppInterface.activity = activity;
    }

    @JavascriptInterface
    public static String startScan() {
        Intent intent = new Intent(activity, ScanActivity.class);
        WEB_APP = 1;

        activity.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE_SCAN);

        //Wait for startActivityForResult to end -since it's asynchronous
        while(WEB_APP == 1) {}

        Log.d("qr_return", qr_data); // Doesn't display it.

        return qr_data; // Empty
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Scan QR
        if (requestCode == REQUEST_FOR_ACTIVITY_CODE_SCAN) {
            if (resultCode == Activity.RESULT_OK) {
                qr_data = data.getStringExtra("qr_data");
            }
        }
        WEB_APP = 0;
    }
}

那么我做错了什么?谢谢。

对不起,我的错,我没有注意到我调用
startActivityForResult
的班级只是一个班级而不是一个活动。。因此,当数据被返回时,它没有被返回

我将发布此代码,以防像我这样的人没有注意到这一点

1-删除WebAppInterface.java类

2-WebActivity.java:

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class WebActivity extends Activity {

    public static int WEB_APP = 0;

    private static int REQUEST_FOR_ACTIVITY_CODE_SCAN = 1000;
    private static String qr_data = "";

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);

        WebView webview = (WebView) findViewById(R.id.aw_webView);

        WebAppInterface jsInterface = new WebAppInterface();
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebChromeClient(new WebChromeClient());
        webview.addJavascriptInterface(jsInterface, "WebAppInterface");
        webview.loadUrl("file:///android_asset/index.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return false;
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Scan QR
        if (requestCode == REQUEST_FOR_ACTIVITY_CODE_SCAN) {
            if (resultCode == Activity.RESULT_OK) {
                qr_data = data.getStringExtra("qr_data");

                Log.d("QR", qr_data);
            }
        }
        WEB_APP = 0;
    }

    public class WebAppInterface {

        WebAppInterface() {}

        @JavascriptInterface
        public  String startScan() {
            Intent intent = new Intent(WebActivity.this, ScanActivity.class);
            WEB_APP = 1;

            startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE_SCAN);

            while(WEB_APP == 1) {}

            Log.d("qr_return", qr_data);

            return qr_data;
        }
    }
}