Java的。在内部回调中获取同步数据

时间:2014-08-10 13:10:44

标签: java android inner-classes

我想要android相机返回的字节数组。因为我期望同步得到它我正在做下面的代码等待回调完成...但是来自c ++我觉得有些东西我不能正确。在我的函数中,我想返回回调中提供的字节数组。我尝试了几种组合,直到这个仍有问题。在同一个下面,jpegCallback.jpgData给出"找不到符号(字段jpgData)"。 (我在Qt上这样做,但我认为这个问题与java(和我)严格相关)。感谢您的任何见解。

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;
}

2 个答案:

答案 0 :(得分:1)

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

另外,一般来说,将那种异步调用转换为同步模式并不是一个好主意。为什么不回复Future<byte[]>

答案 1 :(得分:1)

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

您必须将Camera.PictureCallback子类化才能访问您的公共字段。