Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Java 带有Observable.timer的Observable.zip_Java_Android_Rx Java_Observable_Rx Android - Fatal编程技术网

Java 带有Observable.timer的Observable.zip

Java 带有Observable.timer的Observable.zip,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我试图压缩两个可观察对象,在本例中是一个计时器任务和一个实际任务,这样我的订户只有在两个任务都完成时才会被调用。我想用Observable.zip实现这一点,但不知怎么的,这不起作用,而且我的Observable.timer没有调用onComplete()。这意味着订阅者永远不会同时获得观测值的结果 当我突然将zip更改为merge时,可观察到。计时器会调用onComplete(),我缺少什么 Observable<Long> delayObs = Observable.timer(

我试图压缩两个可观察对象,在本例中是一个计时器任务和一个实际任务,这样我的订户只有在两个任务都完成时才会被调用。我想用
Observable.zip
实现这一点,但不知怎么的,这不起作用,而且我的
Observable.timer
没有调用
onComplete()
。这意味着订阅者永远不会同时获得
观测值的结果

当我突然将
zip
更改为
merge
时,
可观察到。计时器会调用
onComplete()
,我缺少什么

Observable<Long> delayObs = Observable.timer(500, TimeUnit.MILLISECONDS);
Observable<Void> methodObs = method();

mSubscription = Observable.zip(delayObs, methodObs, (pLong, pVoid) -> pVoid)
                              .subscribeOn(Schedulers.io())
                              .observeOn(AndroidSchedulers.mainThread())
                              .subscribe(__ -> thisDoesntGetCalled(), throwable -> M2Log.e(LOG_TAG,
                                      "error", throwable));
Observable delayObs=Observable.timer(500,TimeUnit.ms);
可观察方法OBS=方法();
mssubscription=Observable.zip(delayObs,methodObs,(pLong,pVoid)->pVoid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(\uuuu->thisDoesntGetCalled(),throwable->M2Log.e(LOG\u标记,
“错误”,可丢弃);
方法:

private Observable<Void> method() {
    return Observable.defer(() -> {
        // some work
        return Observable.empty();
    });
}
私有可观察方法(){
返回可观察。延迟(()->{
//一些工作
return-Observable.empty();
});
}

我在这里遗漏了什么吗?

Zip组合了值,但您的方法()的可观察对象没有发出任何信息,因此Zip决定它永远无法组合任何信息,然后完成

您可以将方法更改为此,现在zip确实调用了您提供的函数:

private Observable<Integer> method() {
    return Observable.defer(() -> {
        // some work
        return Observable.just(1);
    });
}
私有可观察方法(){
返回可观察。延迟(()->{
//一些工作
可观察到的回报。仅(1);
});
}

Zip组合了值,但您的方法()的可观察对象没有发出任何信息,因此Zip决定它将无法组合任何信息,然后完成。谢谢!这实际上是有道理的。如果你把这个作为答案贴出来,我会接受的。