Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA在内部回调中获取同步数据_Java_Android_Inner Classes - Fatal编程技术网

JAVA在内部回调中获取同步数据

JAVA在内部回调中获取同步数据,java,android,inner-classes,Java,Android,Inner Classes,我想要android摄像头返回的字节数组。由于我希望同步获得它,我正在执行下面的代码,等待回调完成。。。但是来自C++的我猜有些东西我没有得到正确的答案。在我的函数中,我想返回回调中提供的字节数组。我尝试了几种组合,直到这个组合仍然存在问题。在下面的示例中,jpegCallback.jpgData给出了“找不到符号(字段jpgData)”。(我在Qt上做这件事,但我认为这个问题与java(和我)密切相关)。谢谢你的洞察力 您正在创建一个匿名内部类,这意味着它是PictureCallback的一个

我想要android摄像头返回的字节数组。由于我希望同步获得它,我正在执行下面的代码,等待回调完成。。。但是来自C++的我猜有些东西我没有得到正确的答案。在我的函数中,我想返回回调中提供的字节数组。我尝试了几种组合,直到这个组合仍然存在问题。在下面的示例中,jpegCallback.jpgData给出了“找不到符号(字段jpgData)”。(我在Qt上做这件事,但我认为这个问题与java(和我)密切相关)。谢谢你的洞察力


您正在创建一个匿名内部类,这意味着它是
PictureCallback
的一个未命名子类。由于
PictureCallback
接口没有声明
jpgData
字段,因此您无法访问它


另外,一般来说,将这种异步调用硬塞进同步模式不是一个好主意。为什么不返回一个
Future

从Java的角度来看,您的
jpgCallback
类型是
Camera.PictureCallback
,运行时不知道
Camera.PictureCallback
类型的对象中是否存在公共
jpgData
字段

您必须为Camera.PictureCallback创建子类
Camera.PictureCallback
,才能访问公共字段

public static byte[] CameraTakePicture(){

    final CountDownLatch jpgWaiter = new CountDownLatch(1);

    Camera.PictureCallback jpgCallback=new Camera.PictureCallback(){

        public byte[] jpgData;

        @Override
        public void onPictureTaken(byte[] data,Camera cam){

            jpgData=data;
            jpgWaiter.countDown();
        }
    };

    camera.takePicture(null,null,null,jpgCallback);
    jpgWaiter.await();
    byte[] jpgData=jpgCallback.jpgData.clone();
    return jpgData;
}