RxJava转RxJava2:repeatWhen相关代码改写求助
在RxJava2中改写repeatWhen的示例代码
嘿,别担心,这个问题其实很容易解决!你提到的asObservable()方法在RxJava2里确实被移除了,但原因很简单——RxJava2中的Subject本身就实现了ObservableSource接口,可以直接当作Observable来使用,不需要额外转换。
修改后的RxJava2代码:
@NonNull private final PublishSubject<Void> updateSubject = PublishSubject.create(); private void load() { repository .getSomething() .repeatWhen(repeatHandler -> repeatHandler.flatMap(nothing -> updateSubject)) .subscribe(result -> {}, err -> {}); }
关键点说明:
- 在RxJava2中,
PublishSubject继承自Observable(更准确地说,它实现了ObservableSource,而Observable也实现了这个接口),所以你可以直接把updateSubject传递给flatMap,不需要调用asObservable()。 repeatWhen的逻辑和原来保持一致:当上游流结束时,repeatHandler会发射一个通知,我们通过flatMap切换到updateSubject,等待它发射事件后重新订阅上游的getSomething()流。
这样改写后,代码就能在RxJava2中正常工作啦!
内容的提问来源于stack exchange,提问作者Serg Burlaka
相关产品推荐
相关产品推荐

