如何在JAVASCRIPT调用Android JAVA函数

 我来答
黑马程序员
2017-06-17 · 改变中国IT教育,我们正在行动
黑马程序员
黑马程序员为大学毕业后,有理想、有梦想,想从事IT行业的年轻人改变自己的命运。黑马程序员成就IT黑马
向TA提问
展开全部
  • 首先是网页:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<!DOCTYPE HTML>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>js和android相互调用</title>  
<head>  
  
<script type="text/javascript" language="javascript">  
    //调用java方法jsCallJava()  
    function showHtmlcallJava() {  
        var str = window.android.jsCallJava();  
        document.getElementById("info1").value = str;  
    }  
  
    //调用java方法jsCallJavaWithParams(String var),带参数  
    function showHtmlcallJava2() {  
        var str = window.android.jsCallJavaWithParams("Devin Chen");  
        document.getElementById("info2").value = str;  
    }  
  
    //提供给java调用的方法  
    function show() {  
        document.getElementById("id_input").value = "Java调用Html中的方法";  
    }  
  
    //提供给java调用的方法,带参数  
    function showWithParam(param) {  
        document.getElementById("id_input2").value = "Java调用Html中的方法: " + param;  
    }  
</script>  
</head>  
  
<body>  
    <input id="info1" style="width: 90%" type="text" value="null" /><br>  
    <input type="button" value="Html调用Java方法" onclick="showHtmlcallJava()" /><br>  
    <input id="info2" style="width: 90%" type="text" value="null" /><br>  
    <input type="button" value="Html调用带参数的Java方法" onclick="showHtmlcallJava2()" /><br>  
    <input id="id_input" style="width: 90%" type="text" value="null" /><br>  
    <input type="button" value="Java调用Html方法" onclick="window.android.javaCallJavaScript()" /><br>  
    <input id="id_input2" style="width: 90%" type="text" value="null" /><br>  
    <input type="button" value="Java调用带参数的Html方法" onclick="window.android.javaCallJavaScriptWithParams()" />  
</body>  
</html>
  • Android部分的布局就一个WebView,MainActivity源代码:

/** 
 * java方法和javascript方法的相互调用 
 */  
public class MainActivity extends AppCompatActivity {  
    private static final String url = "http://192.168.0.100:8080/server";  
    private WebView mWebView;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        initView();  
    }  
  
    private void initView() {  
        mWebView = (WebView) findViewById(R.id.web_main);  
        WebSettings settings = mWebView.getSettings();  
        settings.setJavaScriptEnabled(true);  
        settings.setDefaultTextEncodingName("utf-8");  
        mWebView.loadUrl(url);  
        mWebView.setWebViewClient(new WebViewClient());  
        //这两句是必须的,"android"就是jsp中调用方法时window后面的对象  
        Object obj = getObject();  
        mWebView.addJavascriptInterface(obj, "android");  
    }  
  
    private Object getObject() {  
  
        Object obj = new Object() {  
            /** 
             * html中的JavaScript调用Java方法 
             * 注解是必须的 
             * @return 
             */  
            @JavascriptInterface  
            public String jsCallJava() {  
                return "JavaScript调用Java方法";  
            }  
  
            /** 
             * html中的JavaScript调用带参数的Java方法 
             * 注解是必须的 
             * @return 
             */  
            @JavascriptInterface  
            public String jsCallJavaWithParams(String var) {  
                return "JavaScript调用带参数的Java方法" + var;  
            }  
  
            /** 
             * java调用html中的方法,遗憾的是不知道有什么办法可以拿到返回值 
             */  
            @JavascriptInterface  
            public void javaCallJavaScript() {  
                runOnUiThread(new Runnable() {  
                    @Override  
                    public void run() {  
                        mWebView.loadUrl("javascript:show()");  
  
                    }  
                });  
            }  
  
            /** 
             * java调用html中的方法,并且传递参数,这个有大用 
             */  
            @JavascriptInterface  
            public void javaCallJavaScriptWithParams() {  
                runOnUiThread(new Runnable() {  
                    @Override  
                    public void run() {  
                        mWebView.loadUrl("javascript:showWithParam('baoge')");  
                    }  
                });  
            }  
  
        };  
        return obj;  
    }  
}
lhmrgo
2017-04-24
知道答主
回答量:31
采纳率:0%
帮助的人:3.8万
展开全部
一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已

// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ruyuetian
推荐于2017-07-28 · TA获得超过1.1万个赞
知道大有可为答主
回答量:9665
采纳率:98%
帮助的人:954万
展开全部
一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已

// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
战穰0GW
2016-10-14 · TA获得超过1119个赞
知道小有建树答主
回答量:792
采纳率:0%
帮助的人:373万
展开全部
你好:
一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已

// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
monkmonk0
2017-03-03
知道答主
回答量:31
采纳率:0%
帮助的人:11.4万
展开全部
js不能直接调用java的函数,你可以通过ajax的方式接收java函数的返回值来让js使用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式