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");

最新文章

  1. 【巩固】Bootstrap笔记三
  2. Java多线程17:中断机制
  3. React Native填坑之旅--HTTP请求篇
  4. 15Mybatis_输出类型
  5. asp.net导出excel示例代码
  6. Visual Studio.NET、asp.net和C#间的关系是怎样的?
  7. MySQL 数据库 引擎
  8. MFC记录
  9. scheme递归
  10. jQuery异步请求(如getJSON)跨域解决方案
  11. HTTP协议的请求和响应学习
  12. awk程序设计语言之-awk基础
  13. webview 设置编码
  14. 【openstack N版】——认证服务keystone
  15. [2012-06-29]sed根据行号范围执行替换
  16. 清理maven本地库中的lastUpdated文件
  17. Netty 系列四(ChannelHandler 和 ChannelPipeline).
  18. MySQL 烂笔头 备份和还原
  19. java处理url中的特殊字符%等
  20. html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia

热门文章

  1. Java内存通道
  2. Redis数据结构之字符串-SDS
  3. hud 3183
  4. P3410 /// 最大流最小割
  5. js drag drop 收藏夹拖拽移除的简单例子
  6. Intellij IDEA gradle项目目录介绍
  7. 目录文件的操作函数 mkdir ,opendir,readdir,closedir
  8. tomcat之redis
  9. nginx 自启动
  10. K-mean matlab 实现代码