function AndroidHandler:getParamJson()
    local args = {nil}
    local ok,ret = luaj.callStaticMethod(className, "getParamJson", args, "()Ljava/lang/String;")
    assert(ok, "luaj call login error!")
    cclog("ret = "..tostring(ret))
end
 
 

public static int getNum(int n){ return n;} -- Java类的名称local className =“com/qeeplay/frameworks/CheShi”--呼叫的Java方法名local method = 'getDisplayWidth' --呼叫Java方法需要的参数local n = 10 local args = { n } --定义签名--参数:[I]nteger--返回值:[I]nt local sig =“(I)I”--呼叫Java方法local_,screenwidth = luaj.callStaticMethod(className,method,args,sig)

签名使用“(依次排列的参数型别)返回值型别”的格式,几个例子如下:

签名解释

()V参数:无,返回值:无

(I)V参数:int,返回值:无

(Ljava/lang/String;)Z参数:字串,返回值:布尔值

(IF)Ljava/lang/String;参数:整数、浮点数,返回值:字串

这里列出不同型别对应的Java签名字串:

型别名型别I整数,或者Lua function F浮点数Z布尔值Ljava/lang/String;字串V Void空,仅用于指定一个Java方法不返回任何值

cocos2d-x为我们封装了LuaJavaBridge,避免了jni的繁琐,现在可以轻松的实现lua和android端的互调了,引读

LuaJavaBridge - Lua 与 Java 互操作的简单解决方案

看个例子

1、lua调用android端

lua代码

 --引入LuaJavaBridge
local luaj = require "luaj"
local className="com/lua/java/Test" --包名/类名
local args = { "hello android", callbackLua }
local sigs = "(Ljava/lang/String;I)V" --传入string参数,无返回值 --luaj 调用 Java 方法时,可能会出现各种错误,因此 luaj 提供了一种机制让 Lua 调用代码可以确定 Java 方法是否成功调用。
--luaj.callStaticMethod() 会返回两个值
--当成功时,第一个值为 true,第二个值是 Java 方法的返回值(如果有)
--当失败时,第一个值为 false,第二个值是错误代码
local ok,ret = luaj.callStaticMethod(className,"test",args,sigs)
if not ok then item:setString(ok.."error:"..ret) end

android端的代码

package com.lua.java;

/**
* 引入Cocos2dxLuaJavaBridge
*/
import org.cocos2dx.lib.Cocos2dxLuaJavaBridge; public class Test { public static void test(final String param,final int luaFunc){
System.out.println("----传过来的参数----param:"+param);
System.out.println("-------luaFunc:"+luaFunc); /**
* 给lua返回一个字符串
*/
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");
/**
* 移除luaId
*/
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
} }

2、android端调用lua

lua代码,调用的是全局函数

function testAndroid(parameters)
print("--testAndroid--",parameters) cc.Director:getInstance():endToLua() end

android端

import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;
/**
* testAndroid lua中的方法名
* androidLua 传递给lua函数的参数值
*/
Cocos2dxLuaJavaBridge.callLuaGlobalFunctionWithString("testAndroid", "androidLua");

luaj使用 方法签名规则 Cocos2dxLuaJavaBridge的更多相关文章

  1. 缓存篇~第七回 Redis实现基于方法签名的数据集缓存(可控更新,分布式数据缓存)

    返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有 ...

  2. Android有关JNI 学习(两)为JNI方法名称,数据类型和方法签名的一些知识

    我们知道,使用javah产生c/c++当在头文件,将java定义 native 功能,以产生相应jni层功能,如下面: /* * Class: com_lms_jni_JniTest * Method ...

  3. 【转】对于JNI方法名,数据类型和方法签名的一些认识

    [转]对于JNI方法名,数据类型和方法签名的一些认识   之前一直用jni,但是没有考虑Java重载函数,如何在jni-C++里命名,今天看到一篇文章,讲到了类型签名. 原文链接:http://www ...

  4. [原创]java WEB学习笔记105:Spring学习---AOP介绍,相关概念,使用AOP,利用 方法签名 编写 AspectJ 切入点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. java方法签名

    方法的名字和参数列表称为方法的签名.方法的返回类型不是方法签名的一部分.

  6. Spring Data JPA 简单查询--方法定义规则

    一.常用规则速查 1  And 并且2  Or  或3  Is,Equals 等于4  Between  两者之间5  LessThan 小于6  LessThanEqual   小于等于7  Gre ...

  7. Effective Java 第三版——51. 仔细设计方法签名

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  8. C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法

    新建一个.NET Core项目,假如我们有如下代码: using System; namespace MethodOverload { static class DemoExtension { pub ...

  9. Android深入理解JNI(二)类型转换、方法签名和JNIEnv

    相关文章 Android深入理解JNI系列 前言 上一篇文章介绍了JNI的基本原理和注册,这一篇接着带领大家来学习JNI的数据类型转换.方法签名和JNIEnv. 1.数据类型的转换 首先给出上一篇文章 ...

随机推荐

  1. 【Java多线程系列六】Map实现类

    Map的一些实现类有及其特性 类 线程安全 特性 Hashtable 是 Key不能为null HashMap 否 读写效率最高,但在Java6多线程环境下使用不当可能陷入死循环,进而导致CPU使用率 ...

  2. Jackson第一个程序

    再进入学习jackson库的细节之前,让我们来看看应用程序操作功能.在这个例子中,我们创建一个Student类.将创建一个JSON字符串学生的详细信息,并将其反序列化到学生的对象,然后将其序列化到JS ...

  3. leetcode.数组.287寻找重复数-Java

    1. 具体题目 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 1: ...

  4. 天道神诀--IPSAN实现多链路以及多路径安装

    # linux6 环境需求 ISCSI服务端: 2张网卡,足够的磁盘空间 iscsi客户端: 2张网卡(与服务端网段相同) ISCSI服务端配置: 与1张网卡配置主要差别在于配置文件中的允许访问网段, ...

  5. 34-Ubuntu-用户权限-05-超级用户

    超级用户 Linux系统中的root(超级用户)账号通常用于系统的维护和管理,对操作系统的所有资源具有访问的权限. 在大多数的Linux版本中,都不推荐直接使用root账号登录系统. 在Linux安装 ...

  6. Linux 进程间通信 共享内存

    1.特点: 1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.如管道当在内核空间创建以后,用户空间需要内存  拷贝,需要拷贝数据,所以效率低. 2)为了在多个进 ...

  7. Nginx网站部署

    Nginx网站服务部署 常用的网站服务软件 处理静态资源的服务: apache软件:https://apache.org/ nginx软件:https://nginx.org/ 处理动态资源的服务: ...

  8. 深入研究js中的位运算及用法

    什么是位运算? 位运算是在数字底层(即表示数字的 32 个数位)进行运算的.由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序 ...

  9. mysql 学习之1 mysql在window系统下的安装

    转载: https://blog.csdn.net/weixin_43295278/article/details/8287440 此方法只 适用 于window系统 坑 此篇文章在使用 alter ...

  10. 面向对象oop 和类

    面向对象与面向过程的区别 面向对象:面向对象的思维模式说白了就是分类思维模式.思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考.最后,才对某个分类下的细节进行面向过程的思索 自我理解(领 ...