将observable映射到completable时不会调用RxJava2 subscribe

时间:2017-08-24 10:00:29

标签: android rx-java2 rx-binding

我有一个需要发出网络请求的点击事件。

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();
}

所以它保证完成。

1 个答案:

答案 0 :(得分:6)

flatMap案例需要商品,否则其onComplete将永远不会因为已经提到的永不完成的点击来源而触发。例如:

RxView.clicks(button)
.flatMap({ x -> networkCall().andThen(Observable.just("irrelevant")) })
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe({ v -> System.out.println(v)}, { e -> e.printStackTrace() })