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