Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Android 将无限次调用的回调转换为可观察回调_Android_Rx Java - Fatal编程技术网

Android 将无限次调用的回调转换为可观察回调

Android 将无限次调用的回调转换为可观察回调,android,rx-java,Android,Rx Java,假设我有一个回调,它将被无限次调用 公共接口回调{ void onPreview(字节[]数据); } 但是我需要在camera.setPreviewCallback(回调cb)中设置它 如何使用RxJava正确处理这种情况?我想从这个流异步获取数据,尤其是当我完成我的工作时。对我来说,听起来你应该有一个方法camera.getPreview(),它返回一个发出字节数组的可观察值。因此,摄像头不会回调处理程序,而是返回调用者可以订阅的可观察对象。您可以使用Observable.fromEmitt

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

公共接口回调{
void onPreview(字节[]数据);
}

但是我需要在
camera.setPreviewCallback(回调cb)中设置它


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

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

您可以使用
Observable.fromEmitter
并从
Observable.fromEmitter
的主体中设置
camera.setPreviewCallback(回调cb)

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

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

 }
public void stuff(){
可观测obs=可观测。从发射器(发射器->{
回调cb=bytes->emitter.onNext(字节);
摄像头。设置预览回调(cb);
}
obs.subscribe(字节->/*使用字节*/)执行;
}
(java 8语法仅为清晰起见/ie:您可以构建匿名类而不是lambda)

的可能重复