2016-09-20 59 views
1

可以说我有这将被调用的次数转换回调将被调用无限的次数可观察

public interface Callback{ void onPreview(byte[] data); }

无限数量的回调,但我需要提前设置在camera.setPreviewCallback(Callback cb);

如何正确处理这种情况与RxJava?我想异步地从这个流中获取数据,特别是当我完成我的工作时。

+0

可能[如何将基于Observable的基于回调的API转换为一个](http://stackoverflow.com/questions/29040346/how-to-convert-callback-based-api-into-one-based-on-observable ) –

回答

1

您可以使用Observable.fromEmitter并设置camera.setPreviewCallback(Callback cb)Observable.fromEmitter

public void stuff() { 
     Observable<Byte[]> obs = Observable.fromEmitter(emitter -> { 
       Callback cb = bytes -> emitter.onNext(bytes); 
       camera.setPreviewCallback(cb); 
     } 

     obs.subscribe(bytes -> /* perform with bytes */); 

} 

的身体(java的8语法仅用于清晰度/例如:你可以建立一个匿名类,而不是一个拉姆达)

0

对我来说,这听起来像你应该有一个方法camera.getPreview(),返回一个发射字节数组的Observable。所以相机不会回调处理程序,但会返回调用者可以订阅的Observable。