目前是这样的一个需求
打开相册,并传回选择的照片资源fullpath
我利用luaj调用java函数openSystemGalleryForSelect
并向java传递了一个lua处理函数,这个处理函数在Java代码中没有立即调用,而是retain了一下
等待处理结束后,在另外一个Java函数onImageSelected中回调。 遇到的问题是,Java函数中img变量的值是正确的,而调用lua function 时,打印的内容却是空值, 而不是">>>>imagePath"这种形式
-- xx 为我自己封装的库
xx.Helper:openSystemGalleryForSelect(function(imagePath)
xx.ui.Hint.showMsg(">>>>imagePath is:"..imagePath)
end)
-- xx库中的该方法实现如下:
local openSystemGalleryForSelect
openSystemGalleryForSelect = function(self, callback)
local args = {callback}
local sigs = "(I)V"
local ok = luaj.callStaticMethod(className,"openSystemGalleryForSelect",args,sigs)
if not ok then
-- 调用失败
end
end
Java代码如下:
// 打开系统相册 选择图片后回调
public static void openSystemGalleryForSelect(final int luaFunc) {
if (_select_photo_lua_func != 0){
Cocos2dxLuaJavaBridge.releaseLuaFunction(_select_photo_lua_func);
_select_photo_lua_func = 0;
}
_select_photo_lua_func = luaFunc;
Cocos2dxLuaJavaBridge.retainLuaFunction(_select_photo_lua_func);
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
activity.startActivityForResult(intent, PHOTOSELECT);
}
// 选择完照片的回调
public static void onImageSelected(final String img) {
if (_select_photo_lua_func != 0){
Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() {
@Override
public void run() {
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(_select_photo_lua_func, img);
Cocos2dxLuaJavaBridge.releaseLuaFunction(_select_photo_lua_func);
_select_photo_lua_func = 0;
}
});
}
}
有人可以解惑?