我需要每隔X秒进行一次相同的网络呼叫,所以我使用了下面的代码
Observable.interval(X, TimeUnit.SECONDS)
.flatMap(n -> myCall())
.flatMap(response -> Observable.from(response.getList())
.doOnNext(object -> createNewObject())
.doOnCompleted(() -> myStuff())
.subscribe()
但问题是我从未调用过doOnCompleted。 有没有办法每隔X秒继续调用我的服务,但每次调用后都有一个onComplete?
答案 0 :(得分:3)
您可以将您的流媒体操作符移动到第一个flatMap中,您将收到onComplete调用。
Observable.interval(X, TimeUnit.SECONDS)
.flatMap(n -> myCall().flatMap(response -> Observable.from(response.getList())
.doOnNext(object -> createNewObject())
.doOnCompleted(() -> myStuff())
)
答案 1 :(得分:2)
Observable.interval(X, TimeUnit.SECONDS)
.flatMap(n -> myCall())
.doOnNext(() -> myStuff())
.subscribe()
对于网络呼叫使用subscribeOn和observeOn, 并实现doOnError动作doOnError(() - > showNoInternetConnection())
doOnCompleted从不打电话给间隔!!!
最终代码:
Observable.interval(X, TimeUnit.SECONDS)
.flatMap(n -> myCall())
.doOnNext(() -> myStuff())
.doOnError(() -> showNoInternetConnection())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
或者你可以使用订阅这个婴儿车。
Observable.interval(X, TimeUnit.SECONDS)
.flatMap(n -> myCall())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::myStuff(), this::showNoInternetConnection())
答案 2 :(得分:1)
不幸的是,没有。 完成事件by definition表示流已关闭且无法再预期信号。