转换将被无限次调用的回调到Observable

时间:2016-09-20 13:25:17

标签: android rx-java

假设我有一个将被无限次调用的回调

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

但我需要在camera.setPreviewCallback(Callback cb);

中提前设置它

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

2 个答案:

答案 0 :(得分: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语法仅用于清晰/即:您可以构建匿名类而不是lambda)

答案 1 :(得分:0)

听起来你应该有一个方法camera.getPreview(),它返回一个发出字节数组的Observable。因此,摄像机不会回调处理程序,而是返回调用者可以订阅的Observable。