android的Javascript接口不工作
我正在尝试从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
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。谢谢,我发现我正在传递一个空包裹。谢谢,虽然这不是答案,但帮助很大。谢谢,虽然这不是答案,但帮助很大。谢谢