当前位置: 首页 > news >正文

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

展开全部

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

1.html文件,demo.html

function updateHtml(type,type2){

document.getElementById("content").innerHTML =

"弹出对话框,测试"+type+type2;

alert("dialog");

}

这是一个js与android的例子 弹出对话框

调用对象方法 调用对象方法

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

            return name;

        }

public void print() {

Toast.makeText(mContext, "你好", Toast.LENGTH_LONG).show();

System.out.println("我成功的调用了对象");

}

}

}

运行结果如下:

35b6c15032ad52ff5d66f66cd4a342b7.png

相关文章:

  • python实现并发和并行的方式有哪些_Python中的并行和并发是什么
  • java a a=null_面试题((A)null).fun()——java中null值的强转
  • java获取hashcode_java identityHashCode 和 hashCode
  • django mysql 加锁_Django数据库事务和死锁
  • 二叉树某结点的路径java_java二叉树和为某一个值的路径如何实现?思路分享
  • java清空JTextArea文本内容_java – 如何在JTextArea中更改文本的位置
  • java设计模式观察者模式吗_JAVA设计模式---观察者模式
  • java 简易的资源池_资源池设计模式 (Resource Pool)和数据池的简单实现
  • java替代重定向_Java 重定向与管道
  • java五子棋聊天功能_Java基于享元模式实现五子棋游戏功能实例详解
  • bandpass filter java_带通滤波器设计(Bandpass filter design).doc
  • java的位桶是什么,hashmap中的存储桶究竟是什么?
  • 缴费java代码_基于jsp的物业管理缴费系统-JavaEE实现物业管理缴费系统 - java项目源码...
  • java实体类间的转换_java 实体类集合转换和实体类转换
  • mysql碎片整理 提速_MysqL碎片整理优化
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android开源项目规范总结
  • CentOS 7 修改主机名
  • crontab执行失败的多种原因
  • hadoop集群管理系统搭建规划说明
  • Java方法详解
  • js继承的实现方法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • LintCode 31. partitionArray 数组划分
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • python学习笔记-类对象的信息
  • 基于组件的设计工作流与界面抽象
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 算法---两个栈实现一个队列
  • 物联网链路协议
  • 终端用户监控:真实用户监控还是模拟监控?
  • FaaS 的简单实践
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​学习一下,什么是预包装食品?​
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)socket Aio demo
  • **PHP二维数组遍历时同时赋值
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core控制台应用程序初识
  • .NET delegate 委托 、 Event 事件
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET框架
  • .NET面试题(二)
  • .NET企业级应用架构设计系列之结尾篇
  • .NET下ASPX编程的几个小问题
  • .net下简单快捷的数值高低位切换
  • @RequestMapping用法详解
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [Android] Implementation vs API dependency