使用webview从JavaScript调用Android中的Java方法

使用webview从JavaScript调用Android中的Java方法,javascript,java,android,html,webview,Javascript,Java,Android,Html,Webview,我正在尝试访问我的Java方法helloWorld();在Android中使用JavaScriptInterface,在我使用WebView查看的页面上 我对这个有点陌生,我不知道为什么我的html页面没有这个值 这是我正在使用的Android代码: WebView web; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

我正在尝试访问我的Java方法
helloWorld
();在Android中使用
JavaScriptInterface
,在我使用
WebView查看的页面上

我对这个有点陌生,我不知道为什么我的html页面没有这个值

这是我正在使用的Android代码:

WebView web;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    web = (WebView) findViewById(R.id.webview01);
    JavaScriptInterface jsInterface = new JavaScriptInterface(this);
    web.getSettings().setJavaScriptEnabled(true);
    web.addJavascriptInterface(jsInterface, "JSInterface");
    web.getSettings().setUseWideViewPort(true);
    web.getSettings().setLoadWithOverviewMode(true);
    web.setWebViewClient(new myWebClient());
    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("http://exampleweb:10110/exWeb/deposits.jsp");
}

public class myWebClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub

        view.loadUrl(url);
        return true;

    }
}
public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activity) {
        this.activity = activity;
    }
    @JavascriptInterface
    public String helloWorld(){
        return("hello world");
    }
}
}

这是我一直在使用的JavaScript代码(在我使用WebView查看的页面上)

HTML按钮

<td> <button type="button" class="btn btn-xs btn-primary connectToAndroid">Test android</button></td>
有人知道我做错了什么吗?我只想在我的HTML页面中提醒android的“Hello World”


非常感谢您的指点

在加载url之前,尝试添加这行代码,并确保在html中引用jQuery库

web.setWebChromeClient(new WebChromeClient(this));

这很奇怪,几个小时前我试过用这个:

$(".connectToAndroid").on('click', function () {
  var val = Android.helloWorld();
  alert(val);
 });
然后我改了,不再说安卓了

然而,我不断地得到一个错误,说:

Uncaught ReferenceError: Android is not defined
过了一会儿,我想,
Android.helloWorld()必须以某种方式缓存在我的webview应用程序或其他东西中

所以,我改回这个:

$(".connectToAndroid").on('click', function () {
  var val = Android.helloWorld();
  alert(val);
 });
并补充说:

web.addJavascriptInterface(jsInterface, "Android");
现在它就像一个符咒,从一开始就应该如此,如果不是为了某个地方的某个缓存


有人能解释为什么会这样吗?android webview是否缓存javascript代码?我能在将来以某种方式防止这种行为吗?在编写/测试新东西时,缓存非常麻烦。

试着登录
helloWorld
,看看它是否被调用。你为什么通过WINDOW.JSinterface调用它,而不是直接通过JSinterface调用它?@r4phG我不知道为什么,实际上,我一直在尝试遵循互联网上的一些指南。我将尝试不使用“窗口”。@Coderap您尝试过吗?:您在使用jquery之前加载了它吗?尝试使用javascript而不是jquery,然后再试一次。我会给你一个投票,不是因为你解决了答案,而是这确实帮助我显示了“警报”。当我设法传递数据时,警报还没有起作用,但是通过添加这行代码,我也可以对数据发出警报。谢谢:)@Coderap很高兴我帮了你:)
web.addJavascriptInterface(jsInterface, "Android");