如何在Android平台上使用JS直接调用Java方法

 我来答
小傻

2016-05-08 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31136
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

Android平台上使用js调用java方法,主要是通过webview控件提供的 webview.addJavascriptInterface(new Person(this), "per");  这个方法将java对象注入到js中,然后可以在js中通过调用该java对象的方法来实现回调,如下代码:

    1.html文件,demo.html

<html>  
<head>  
<script type="text/javascript" >  
function updateHtml(type,type2){  
     document.getElementById("content").innerHTML =     
         "弹出对话框,测试"+type+type2;  
       
    alert("dialog");  
}  
  
</script>  
</head>  
<body>  
这是一个js与android的例子 <a onClick="window.ceshi.startFunction()" href="">弹出对话框</a>  
调用对象方法 <a onClick="per.print()" href="">调用对象方法</a>  
<span id="content"></span>  
</body>  
</html>


    2.android端控制代码:

package com.ccb.javascript;  
  
import android.app.Activity;  
import android.app.AlertDialog;  
import android.content.Context;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.webkit.WebView;  
import android.widget.Button;  
import android.widget.Toast;  
  
public class MainActivity extends Activity {  
  
    int priceMenu1 = 1;  
  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        // 获取webView 控件  
        final WebView webview = (WebView) findViewById(R.id.webview);  
        // 加上这句话才能使用javascript方法  
        webview.getSettings().setJavaScriptEnabled(true);  
        webview.loadUrl("file:///android_asset/demo.html");  
        webview.addJavascriptInterface(new Person(this), "per");  
        Button button = (Button) findViewById(R.id.button); // 获取button控件  
                                                            // 即"调用html中的js方法"  
                                                            // 按钮  
        // 给button添加事件响应,执行JavaScript的fillContent()方法  
        button.setOnClickListener(new Button.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
  
  
                webview.loadUrl("javascript:updateHtml('str11','bar22')");//多个参数拼接  
            }  
        });  
  
        Button button1 = (Button) findViewById(R.id.button1);// 获取button1控件  
                                                                // 即"重新加载html "按钮  
        // 给button添加事件响应,执行JavaScript的fillContent()方法  
        button1.setOnClickListener(new Button.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                Log.d("MainActivity", "button1 OnClick");  
                webview.loadUrl("file:///android_asset/demo.html");  
                // return  
            }  
        });  
  
        // 增加接口方法,让html页面调用  
        webview.addJavascriptInterface(this, "ceshi");  
  
        Button buttonceshi = (Button) findViewById(R.id.buttonceshi);  
        buttonceshi.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
  
            }  
        });  
  
    }  
  
    public void startFunction() {  
        AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this);  
        ab.setTitle("提示");  
        ab.setMessage("通过js 调用了 java 中的方法");  
        ab.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                dialog.dismiss();  
            }  
        });  
        ab.create().show();  
    }  
  
    class Person {  
        Context mContext;  
  
        Person(Context c) {  
            mContext = c;  
        }  
  
        String name = "我的名字是对象";  
        int age;  
                public String getName() {//js里面无法直接使用对象加属性的方式访问,暂时没找到方法,只能用对象加getName  
<span style="white-space:pre">            </span>return name;  
<span style="white-space:pre">        </span>}  
        public void print() {  
            Toast.makeText(mContext, "你好", Toast.LENGTH_LONG).show();  
  
            System.out.println("我成功的调用了对象");  
        }  
    }  
}

运行结果如下:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式