您的位置:首页 > 编程语言 > Lua

Android和Luaj之间互相传值的问题

2016-06-15 10:22 441 查看
第一次写有点紧张呢啊哈哈

直接上代码

luaj这边,以支付宝为例

function Dionation:getDingDan(trade_no)
self.DingDannum=trade_no
print("lxd"..trade_no)
--要传到安卓那边的内容
local args = {trade_no, tostring(self.money)

}

--要传的类型,Ljava/lang/String;代表是String类型的,还有int型的是I,其余的自己去搜,网上好多。括号后面的V代表的是安卓那边类是Void,没有返回值的,如果那边是有返回值的String的,那V就要写成Ljava/lang/String;了。
local sigs = "(Ljava/lang/String;Ljava/lang/String;)V"

--对应的方法所在的类
local className = "org/cocos2dx/lua/MyAliPay"
--“pay”是要调用的安卓的方法名
local ok,ret  = luaj.callStaticMethod(className,"pay",args,sigs)

if not ok then

return nil
else
return ret
end
print("***********************8hahah")

end




对应的安卓这边的代码:

//方法一定是静态的!!
public static void pay( String orderId, String price) {

System.out.println("=======pay======="+orderId+"=="+price);

}

还有一点,我从luaj那边单独传int值,安卓这边接的话,是有问题的,比如那边传个10,到安卓这边输出就是14834837之类的一串,如果单独传String的话,就会报内存溢出的错,就穿不过来,所以最后我传了两个,String和int都传了,这边接到的值就没问题,也不会报错。不知道原因……代码如下:

function shareLayer:onShare()
print("LYQ********")
-- self:runAction(cc.RemoveSelf:create())
local text=tostring(info.bId)
--tostring(info.bId)在安卓那边用String接的,info.bId用int接的。两个的值完全一样,但这样传就不会报错。。
local args = {tostring(info.bId),info.bId}
print("LYQ********"..info.bId..tostring(info.bId))

local sigs = "(Ljava/lang/String;I)V"

local className = "org/cocos2dx/lua/AppActivity"

local ok,ret = luaj.callStaticMethod(className,"Shard",args,sigs)

if not ok then

return nil
else
return ret
end

end





好,以上是从luaj到安卓那边,现在说说安卓到luaj这边。

直接上代码:
//mid是luaj那边的一个标示id,在安卓这边用这个方法,把要传的值传到对应的id那边。暂时只会传string的,如果要传多个就多加几个id
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(mid, url);
Cocos2dxLuaJavaBridge.releaseLuaFunction(mid);





下面是luaj接收的代码:
function LoginScene:onQQ()
print("qq")
--就用这个接收,括号里面就是接收到的值
local function id(id_str)
print("*****************id_str******8hahah"..id_str)
end
local function name(name_str)
print("*****************name_str******8hahah"..name_str)
end
local function head_url(url_str)
print("*****************url_str******8hahah"..url_str)
end
--上面那个mid就是这边传过去的这个mid哦,然后一切就都跟上面一样了呢
local args = { "SHARE_MEDIA.QQ", id ,name,head_url}

local sigs = "(Ljava/lang/String;III)V"

local className = "org/cocos2dx/lua/AppActivity"

local ok,ret  = luaj.callStaticMethod(className,"QQLogin",args,sigs)

print("***********************8hahah"..ret)

if not ok then

return nil
else
return ret
end
end


好了,以上就是我这两天在做的东西。可能不完善,想起来了再补充。
luaj这边其余的不明白的随便搜一下有好多,我这边只是简单说一下怎么传值。

哈哈哈。大家午安~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息