【发布时间】:2017-08-24 10:00:28
【问题描述】:
我有一个点击事件需要发出网络请求。
RxView.clicks(button)
.flatMapCompletable({ x -> networkCall() })
.subscribe(...)
点击是一个 Observable。networkCall 返回一个 Completable。
然而,当我点击按钮时,subscribe 内的块永远不会被调用。
我也试过了
RxView.clicks(button)
.flatMap({ x -> networkCall().toObservable<Void>() })
.subscribe(...)
我怎样才能让它工作,以便每次点击按钮时都会发出网络请求,然后在subscribe 中处理。
编辑:
我还没有做网络的东西所以目前只是
public Completable networkCall() {
Completable.complete();
}
所以保证完成。
【问题讨论】:
-
如何覆盖订阅?我不确定,但如果你只是覆盖
onNext这可能不起作用。您是否还使用订阅者覆盖了onComplete函数? -
关于文档,我还要说 flatmapCompletable 对您来说不是正确的选择:将上游 Observable 的每个元素映射到 CompletableSources,订阅它们并等待上游和所有 CompletableSources 完成。 ->
RxView.clicks根本没有完成! reactivex.io/RxJava/javadoc/io/reactivex/… -
@Christopher 我觉得
flatmapCompletable不合适,这就是为什么我也尝试了第二个代码块。我已经覆盖了onNext和onComplete,只是在这些方法中添加了日志和断点,但它也没有命中。但是,即使使用第二个代码块,我仍然担心,因为当从网络调用中调用onComplete时,它可能会结束流。 -
我唯一的选择是将网络调用嵌套在点击的订阅中吗?所以基本上有两个订阅?
-
@SunnySydeUp,你确定你的 networkCall 完成了吗?请添加代码
标签: android rx-java2 rx-binding