RxJava2订阅在映射可观察到可完成时不被调用
问题描述:
我有一个需要发出网络请求的点击事件。RxJava2订阅在映射可观察到可完成时不被调用
RxView.clicks(button)
.flatMapCompletable({ x -> networkCall() })
.subscribe(...)
该点击是可观察的。 networkCall
返回Completable。
但是,当我点击按钮时,从不会调用subscribe
中的块。
我也试过
RxView.clicks(button)
.flatMap({ x -> networkCall().toObservable<Void>() })
.subscribe(...)
我怎样才能得到这个工作,这样每次我在按钮上点击,一个网络请求,然后在subscribe
处理。
编辑:
我没有做过网络的东西又那么目前它只是
public Completable networkCall() {
Completable.complete();
}
因此它保证完成。
答
该flatMap
案件需要的项目,否则其onComplete
永远不会因为已经提到的从未完成的点击来源发射。例如:
RxView.clicks(button)
.flatMap({ x -> networkCall().andThen(Observable.just("irrelevant")) })
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ v -> System.out.println(v)}, { e -> e.printStackTrace() })
你如何覆盖订阅?我不确定,但如果你只是重写'onNext',这可能无法正常工作。你是否也重写了用户的'onComplete'函数? – Christopher
关于文档,我还会说flatmapCompletable不适合您:将上游Observable的每个元素映射到CompletableSources,订阅它们并等待上游和所有CompletableSources完成。 - >'RxView.clicks'完全没有完成! http://reactivex.io/RxJava/javadoc/io/reactivex/Observable.html#flatMapCompletable-io.reactivex.functions.Function- – Christopher
@Christopher我有一种感觉,“flatmapCompletable”不合适,这就是为什么我也尝试了第二个代码块。我已经重写了'onNext'和'onComplete',并在这些方法中添加了日志和断点,并且它也没有命中。但是,即使使用第二个代码块,我仍然担心,因为当网络调用调用onComplete时,它可能会结束流。 – SunnySydeUp