Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/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
Rx java 单击按钮时强制执行onNext()_Rx Java - Fatal编程技术网

Rx java 单击按钮时强制执行onNext()

Rx java 单击按钮时强制执行onNext(),rx-java,Rx Java,下面的代码使用Observable.from()从列表中发出项目。对于每个项目,将使用来自devide.connectForPolice()的可观察的执行maxConcurrent值为1的flatMap()。device.connectForPolice()方法对当前项执行许多操作,并最终调用Observable.just()以转到下一项。代码如下: mConnectingSubscription=Observable.from(mAdapter.getItems()) .flatMap(设备-

下面的代码使用
Observable.from()
从列表中发出项目。对于每个项目,将使用来自
devide.connectForPolice()
可观察的
执行maxConcurrent值为1的
flatMap()
device.connectForPolice()
方法对当前项执行许多操作,并最终调用
Observable.just()
以转到下一项。代码如下:

mConnectingSubscription=Observable.from(mAdapter.getItems())
.flatMap(设备->{
返回device.connectForPolice(device.getName());
}, 1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
已完成的公共void(){}
@凌驾
公共无效者(可抛弃者){}
@凌驾
public void onNext(字符串s){
如果(s.包含(“str”)){
移动设备(s);
}
}
});

当此代码开始运行时,我将在屏幕上添加一个按钮,单击后,我希望“强制”当前项从原始的
Observable.from(mAdapter.getItems())
完成,以便列表中的下一项可以通过该链。它本质上是一个“跳过”或“完成”按钮。将其整合到事件链中的最佳方式是什么?

这取决于您想要实现的确切行为。如果忽略
device.connectForPolice(device.getName())
的结果就足够了,那么解决方案就很简单了。只需将此流与另一个表示单击此跳过按钮的流合并,并仅获取1项,以先到者为准

.flatMap(device -> {
    return device.connectForPolice(device.getName())
               .mergeWith(RxView.clicks(skipBtn).map(voidObject -> someString))
               .take(1);
}, 1)
但是,我假设其中涉及大量计算,因此我认为当用户决定跳过时,您希望中断这些计算。在这种情况下,我认为您必须编写自己的制作人,并在那里收听点击,以立即停止计算