首页 > 后端开发 > 正文

怎么实现javascript中调用java类中的方法

2024-03-21 08:15:37 | 我爱编程网

怎么实现javascript中调用java类中的方法很多朋友对这方面很关心,我爱编程网整理了相关文章,供大家参考,一起来看一下吧!

本文目录一览:

怎么实现javascript中调用java类中的方法

怎么实现javascript中调用java类中的方法

实现javascript中调用java类中的方法如下:

只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。

1、映射Java对象到JavaScript对象上

代码如下:

mWebView = (WebView) findViewById(R.id.wv_content);

mWebView.setVerticalScrollbarOverlay(true);

final WebSettings settings = mWebView.getSettings();

settings.setSupportZoom(true);

//WebView启用Javascript脚本执行

settings.setJavaScriptEnabled(true);

settings.setJavaScriptCanOpenWindowsAutomatically(true);

//映射Java对象到一个名为”js2java“的Javascript对象上

//JavaScript中可以通过"window.js2java"来调用Java对象的方法

mWebView.addJavascriptInterface(new JSInvokeClass(), "js2java");

代码如下:

/**网页Javascript调用接口**/

class JSInvokeClass {

public void back() {

activity.finish();

}

}

2、JavaScript调用Java对象示例

调用上述JSInvokeClass类对象的back方法,如下:

window.js2java.back();

怎么实现javascript中调用java类中的方法

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

例如,在下面的例子中我们会调用一个Java方法,它弹出一个android的Alert对话框。

//给我们熟悉的AppActivity类稍微加点东西

public class AppActivity extends Cocos2dxActivity {

private static AppActivity app = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

app = this;

}

public static void showAlertDialog(final String title,final String message) {

//这里一定要使用runOnUiThread

app.runOnUiThread(new Runnable() {

@Override

public void run() {

AlertDialog alertDialog = new AlertDialog.Builder(app).create();

alertDialog.setTitle(title);

alertDialog.setMessage(message);

alertDialog.setIcon(R.drawable.icon);我爱编程网

alertDialog.show();

}

});

}

}

然后我们在js中调用

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");

怎么实现javascript中调用java类中的方法

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

我爱编程网(https://www.52biancheng.com)小编还为大家带来如何在Android平台上使用JS直接调用Java方法的相关内容。

在Cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用Java的静态方法。使用方法很简单:

在callStaticMethod方法中,通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。

(1)类名

参数中的类名必须是包含Java包路径的完整类名,例如在org.cocos2dx.JavaScript这个包下面写了一个Test类:

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中习惯的点。

(2)方法名

方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。

(3)方法签名

方法签名稍微有一点复杂,最简单的方法签名是()V,表示一个没有参数没有返回值的方法。其他一些例子:

(I)V表示参数为一个int,没有返回值的方法;

(I)I表示参数为一个int,返回值为int的方法;

(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;

现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

(4)参数

参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。

(5)使用示例

将会调用上面的Test类中的静态方法:

//调用hello方法

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String)V", "this is a message from js");

//调用第一个sum方法

var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);

cc.log(result); //10

//调用第二个sum方法

var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);

cc.log(result); //5

(6)注意

另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。

例如,在下面的例子中会调用一个Java方法,弹出一个android的Alert对话框。

//给我们熟悉的AppActivity类稍微加点东西

public class AppActivity extends Cocos2dxActivity {

private static AppActivity app = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

app = this;

}

public static void showAlertDialog(final String title,final String message) {

//这里一定要使用runOnUiThread

app.runOnUiThread(new Runnable() {

@Override

public void run() {

AlertDialog alertDialog = new AlertDialog.Builder(app).create();

alertDialog.setTitle(title);

alertDialog.setMessage(message);

alertDialog.setIcon(R.drawable.icon);

alertDialog.show();

}

});

}

}

在js中调用

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");

这样调用就可以看到一个android原生的Alert对话框了。

以上就是我爱编程网为大家带来的怎么实现javascript中调用java类中的方法,希望能帮助到大家!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“怎么实现javascript中调用java类中的方法”相关推荐
如何实现thinkphp中Db类的方法调用风格?
如何实现thinkphp中Db类的方法调用风格?

PHP中的__construuct()函数中的return的意义?构造函数__construct()是为了构造一个对象实例,在函数中进行return是完全没有意义的,PHP会忽略其中的return语句。因此,带有return的构造函数是不规范的代码,不要去学习。如何实现thinkphp中Db类的方法调用风格?我们先来看下官网对listen的说明:如果开启数据库的调试模式的话,你可以

2024-09-08 21:50:19
java中有类似PHP中的ord的函数吗 java中怎么实现
java中有类似PHP中的ord的函数吗 java中怎么实现

php问题……php截取字符串几个实用的函数1.substr(源字符串,其实位置[,长度])-截取字符串返回部分字符串<?php$str="phpddt.com";echosubstr($str,2);//pddt.comechosubstr($str,2,3);//pddechosubstr($str,-2);//om负数从结尾开始取?>但是当你截取中文字符串的时候很

2024-09-28 09:29:42
PHP怎么调用其他类的方法
PHP怎么调用其他类的方法

php"直接用类名"和"new实例化"调用函数哪种方法效率更高?1.首先用法不同,__new__()用于创建实例,所以该方法是在实例创建之前被调用,它是类级别的方法,是个静态方法;而__init__()用于初始化实例,所以该方法是在实例对象创建后被调用,它是实例级别的方法,用于设置对象属性的一些初始值。由此可知,__new__()在__init__()之前被调用。如果__new_

2024-07-19 01:34:22
PHP 静态方法怎么调用父类非静态方法
PHP 静态方法怎么调用父类非静态方法

php直接用类名调用静态方法会不会触发类的构造函数调用静态方法与触发类的构造函数没有必然关系。但是静态方法可以实例化类本身,这时候会触发构造函数,而且可以传参数。如:class classname{    private function __construct($a){        $this->a = $a;        exit($this->a);//打印一下    

2024-07-24 18:21:44
怎么调用js文件怎么调用js文件中的方法
怎么调用js文件怎么调用js文件中的方法

php和js互相调用,php中有一个数组,在html有一个按钮,按钮调用js函数的时候会传一个数字参数那就只能使用ajax了!也就是按钮触发js函数后,ajax再次异步执行一次php并返回结果而进行后续操作!或者页面执行的时候,直接将php数组输出js格式的json数据,也行!比如:<?php$arr = array(  array('a' => 'abc'),

2024-10-21 22:38:34
php中怎么调用方法中的静态变量?
php中怎么调用方法中的静态变量?

php中怎么调用方法中的静态变量?看看下面的实例:<?phpfunctionTest(){$w3sky=0;echo$w3sky;$w3sky++;}?>本函数每次调用时都会将$w3sky的值设为0并输出"0"。将变量加一的$w3sky++没有其到效果,因为一旦退出本函数则变量$w3sky就不存在了。要写一个不会丢失本次计数值的计数函数,

2024-07-24 12:10:47
php编程中怎么实现get和post请求的方法?
php编程中怎么实现get和post请求的方法?

PHP发送get、post请求的6种方法简明总结探讨PHP发送GET、POST请求的六种方法,我们逐步解析每个步骤和注意事项。首先,使用file_get_contents函数配合URL参数进行GET请求,这是最直观的方法。其次,通过使用fopen函数结合URL打开连接,同样实现GET请求,这种方式提供了更多的操作可能。接着,以file_get_contents函数为主体,我

2024-11-09 02:06:01
Python中怎么调用C代码?Python中调用C代码方法
Python中怎么调用C代码?Python中调用C代码方法

Python中怎么调用C代码?Python中调用C代码方法Python是一门较为简单的编程语言,如今很多小学都已经开始教授python了,可见它的热度之高。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。而如果你是零基础想要自学Python的话,那么就建议你进行专业系统的视频课程学习!为帮助广大Python学习爱好者提升,精选到了几套专业优质的Python自学视频课程,学

2023-12-16 10:22:52