android的Javascript接口不工作

android的Javascript接口不工作,javascript,android,Javascript,Android,我正在尝试从Android向JavaScript传递变量。单击映射按钮时,它将使用以下onCreate方法打开此类: @SuppressLint("JavascriptInterface") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.maps); setRequested

我正在尝试从Android向JavaScript传递变量。单击映射按钮时,它将使用以下
onCreate
方法打开此类:

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    myWebView = (WebView) findViewById(R.id.webview);
    setMyWebviewSettings(myWebView.getSettings());

    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());

    Bundle extras = getIntent().getExtras();
    double[] coordinates = setCoordinates(extras);

    myWebView.addJavascriptInterface(new JavaScriptInterface(coordinates), "JSInterface");

    myWebView.loadUrl("http://10.0.0.32:8887/services/maps/examples/basic-example.htm");
}
private void setMyWebviewSettings(WebSettings MyWebviewSettings){
    MyWebviewSettings.setAllowFileAccessFromFileURLs(true);
    MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setJavaScriptEnabled(true);
    MyWebviewSettings.setDomStorageEnabled(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setBuiltInZoomControls(true);
    MyWebviewSettings.setAllowFileAccess(true);
    MyWebviewSettings.setSupportZoom(true);
}
private double[] setCoordinates(Bundle extras) {

    double[] coordinates = new double[3];

    coordinates[0] = 45.9049;
    coordinates[1] = 13.3177;
    coordinates[2] = 15;

    if (extras != null) {
        coordinates[0] = extras.getDouble("lat");
        coordinates[1] = extras.getDouble("lon");
        coordinates[2] = extras.getDouble("pan");
    }
    return coordinates;
}
以下是
setMyWebviewSettings
方法:

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    myWebView = (WebView) findViewById(R.id.webview);
    setMyWebviewSettings(myWebView.getSettings());

    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());

    Bundle extras = getIntent().getExtras();
    double[] coordinates = setCoordinates(extras);

    myWebView.addJavascriptInterface(new JavaScriptInterface(coordinates), "JSInterface");

    myWebView.loadUrl("http://10.0.0.32:8887/services/maps/examples/basic-example.htm");
}
private void setMyWebviewSettings(WebSettings MyWebviewSettings){
    MyWebviewSettings.setAllowFileAccessFromFileURLs(true);
    MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setJavaScriptEnabled(true);
    MyWebviewSettings.setDomStorageEnabled(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setBuiltInZoomControls(true);
    MyWebviewSettings.setAllowFileAccess(true);
    MyWebviewSettings.setSupportZoom(true);
}
private double[] setCoordinates(Bundle extras) {

    double[] coordinates = new double[3];

    coordinates[0] = 45.9049;
    coordinates[1] = 13.3177;
    coordinates[2] = 15;

    if (extras != null) {
        coordinates[0] = extras.getDouble("lat");
        coordinates[1] = extras.getDouble("lon");
        coordinates[2] = extras.getDouble("pan");
    }
    return coordinates;
}
下面是
JavaScriptInterface

public class JavaScriptInterface {

    double lat;
    double lon;
    double pan;

    JavaScriptInterface(double[] coordinate) {
        this.lat = coordinate[0];
        this.lon = coordinate[1];
        this.pan = coordinate[2];
    }

    public double getLatValue() {
        return lat;
    }

    public double getLonValue() {
        return lon;
    }

    public double getPanValue() {
        return pan;
    }
}
以下是设置坐标的方法:

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maps);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    myWebView = (WebView) findViewById(R.id.webview);
    setMyWebviewSettings(myWebView.getSettings());

    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());

    Bundle extras = getIntent().getExtras();
    double[] coordinates = setCoordinates(extras);

    myWebView.addJavascriptInterface(new JavaScriptInterface(coordinates), "JSInterface");

    myWebView.loadUrl("http://10.0.0.32:8887/services/maps/examples/basic-example.htm");
}
private void setMyWebviewSettings(WebSettings MyWebviewSettings){
    MyWebviewSettings.setAllowFileAccessFromFileURLs(true);
    MyWebviewSettings.setAllowUniversalAccessFromFileURLs(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setJavaScriptEnabled(true);
    MyWebviewSettings.setDomStorageEnabled(true);
    MyWebviewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    MyWebviewSettings.setBuiltInZoomControls(true);
    MyWebviewSettings.setAllowFileAccess(true);
    MyWebviewSettings.setSupportZoom(true);
}
private double[] setCoordinates(Bundle extras) {

    double[] coordinates = new double[3];

    coordinates[0] = 45.9049;
    coordinates[1] = 13.3177;
    coordinates[2] = 15;

    if (extras != null) {
        coordinates[0] = extras.getDouble("lat");
        coordinates[1] = extras.getDouble("lon");
        coordinates[2] = extras.getDouble("pan");
    }
    return coordinates;
}
除了不加载地图外,其他一切都正常。
Bundle extras
Null
。如何修复此问题?

因此,我认为您可能缺少了
@JavascriptInterface
注释:

public class JavaScriptInterface {
   @JavascriptInterface
   public double getLatValue() {
      return lat;
   }

   @JavascriptInterface
   public double getLonValue() {
      return lon;
   }

   @JavascriptInterface
   public double getPanValue() {
      return pan;
   }
}
因此,我认为您可能缺少了
@JavascriptInterface
注释:

public class JavaScriptInterface {
   @JavascriptInterface
   public double getLatValue() {
      return lat;
   }

   @JavascriptInterface
   public double getLonValue() {
      return lon;
   }

   @JavascriptInterface
   public double getPanValue() {
      return pan;
   }
}

确保在创建启动第二个活动的意图时传递值。如果bundle为null,则表示它们不包含在intent中。

确保在创建启动第二个活动的intent时传递了值。如果bundle为null,则表示它们不包含在intent中。

是的,我发现传递的是一个空bundle。谢谢,我发现我正在传递一个空包裹。谢谢,虽然这不是答案,但帮助很大。谢谢,虽然这不是答案,但帮助很大。谢谢