RxJava2 concat()只运行第一个可观察的

RxJava2 concat()只运行第一个可观察的,java,android,rx-java,reactive-programming,rx-java2,Java,Android,Rx Java,Reactive Programming,Rx Java2,我有3个方法返回可观察(String)。我需要一个接一个地执行这个方法。每种方法需要大约2或3分钟。我正在使用下一个代码: Observable.concat(one(),two(),three()) .subscribeWith(new DisposableObserver<String>() { @Override public void onNext(String s) {

我有3个方法返回
可观察(String)
。我需要一个接一个地执行这个方法。每种方法需要大约2或3分钟。我正在使用下一个代码:

Observable.concat(one(),two(),three())
          .subscribeWith(new DisposableObserver<String>() {
                    @Override
                    public void onNext(String s) {
                        LOG.debug(s);
                    }

                    @Override
                    public void onError(Throwable e) {
                        LOG.error(e.toString());
                    }

                    @Override
                    public void onComplete() {

                    }
                });
Observable.concat(一(),二(),三())
.subscribowith(新可处置观察员){
@凌驾
public void onNext(字符串s){
日志调试;
}
@凌驾
公共无效申报人(可丢弃的e){
LOG.error(例如toString());
}
@凌驾
未完成的公共空间(){
}
});

仅执行第一种方法。第二种和第三种方法被忽略。我不明白是什么问题?我使用的是RxJava2 2.1.6版

您的第一个可观察到的是完整的还是仅发射一个项目?根据统计,它不会从两个或三个项目中发出项目,直到一个项目完成。

显然,
one()
是一个
可观察的
,它不会发出
onComplete()
事件,这意味着它尚未完成,而
concat()
操作员将等待observable发出终端事件,然后才开始下一个observable

如果您不具备第一个可观察对象的创建逻辑,您可以使用API将可观察对象转换为单个

如果您确实可以访问第一个可观察对象的创建逻辑,则会发出一个终端事件(即)


如David Karnok在评论部分所述:

Single.fromObservable()
还需要一个完整的源代码,以便在该源代码恰好没有项目时出错


我的第一个可见光仅发射一个项目,我不知道如何继续工作?在源代码中调用
onComplete
,以允许
concat
继续下一个。这是可能的,但不太好。我发现只有一个决定使用zip并更改程序的某些部分。
Single.fromObservable()
同样,如果该源恰好没有项目,它可能会出错。它可能可以工作,但在我的情况下,我发现了错误,因为每个方法都会发送8-10个请求,而onNext方法在每个方法的所有请求完成之前就开始了。我使用zip只找到了一个决定,并更改了程序的某些部分。
Observable.concat(Single.fromObservable(one()), two(), three())