java+lua互相调用_Lua学习 2) —— Android与Lua互调

  • Post author:
  • Post category:java


2014-07-09

一、Android类调用lua并回调

Android调用Lua函数,同时把类作为参数传递过去,然后再Lua中回调类的函数

调用lua

mLuaState = LuaStateFactory.newLuaState();

mLuaState.openLibs();

mLuaState.LdoString(KKLua.loadAssetsString(mContext, “lua/swallow.lua”));//将lua转换为字符串

mLuaState.getField(LuaState.LUA_GLOBALSINDEX, “luaUpdate”);//获取lua中的function

mLuaState.pushJavaObject(this);//传递参数

mLuaState.call(1, 0);//一个参数, 0个返回值

回调的接口

public void luaDraw(int imageId, int x, int y, int scale) {//注意也必须要是public, lua才能调用到

System.out.println(“imageId, x, y, scale: ” + imageId + “, ” + x + “, ” + y + “, ” + scale);

}lua代码

function luaUpdate(luaCanvas)

luaCanvas:luaDraw(0, 1, 2, 1)

end

二、luajava介绍(在LuaJava库里面包含的)

lua中是没有类的,luajava库中有个luajava可以创建java中的类,并调用。下面介绍几个方法

①newInstance(className, …)

说明:可以根据类名创建一个Java类,同时返回一个lua变量与Java类对应。这样在lua中就可以直接调用Java中的方法了。

obj = luajava.newInstance(“java.lang.Object”)

— obj is now a reference to the new object

— created and any of its methods can be accessed.

— this creates a string tokenizer to the “a,b,c,d”

— string using “,” as the token separator.

strTk = luajava.newInstance(“java.util.StringTokenizer”,

“a,b,c,d”, “,”)

while strTk:hasMoreTokens() do

print(strTk:nextToken())

end

②bindClass(className)

说明:可以让lua中的变量对应一个Java的类(是类,不是实例),这样就可以用lua的这个变量创建实例以及调用静态类

sys = luajava.bindClass(“java.lang.System”)

print ( sys:currentTimeMillis() )

— this prints the time returned by the function.

③new(javaClass)

说明:这个就是在②的基础上创建的

str = luajava.bindClass(“java.lang.String”)

strInstance = luajava.new(str)

④createProxy(interfaceNames, luaObject)

⑤loadLib(className, methodName)

这两个方法目前还没用到,以后会用了再介绍

以上,谢谢!

原文:http://blog.csdn.net/you_and_me12/article/details/37600129



版权声明:本文为weixin_39834745原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。