android - RXJava + 改造。每 n 秒重复一次请求

标签 android retrofit rx-java repeat

请求在服务器成功响应后每 n 秒重复一次。但是查询时有一个字段,它改变了查询本身。 RepeatWhen - 不适合这个原因。告诉我,我该如何解决这个问题?谢谢)

  AtomicBoolean onComplete = new AtomicBoolean(true);
        Observable.interval(3, TimeUnit.SECONDS)
                .compose(rxSchedulersAbs.getIOToMainTransformer())
                .map(new Func1<Long, Observable<String>>() {
                    @Override
                    public Observable<String> call(Long tick) {
                        if (onComplete.get()) {
                            onComplete.set(false);
                            return requestCreator.getSyncMessage();
                        }
                        return null;
                    }
                }).map(sync -> {
            if (sync != null)
                onComplete.set(true);
            return sync;
        }).subscribe();

最佳答案

如果您想根据服务器返回的内容更改请求的频率,我建议您使用BehaviorSubject:

BehaviorSubject<Integer> delayObs = BehaviorSubject.create(3);
delayObs
.serialize()
.flatMap(delay -> Observable.timer(delay, TimeUnit.SECONDS))
.flatMap(dummy -> requestCreator.getSyncMessage())
.onErrorResumeNext(e -> {
   if(e instanceof IOException) {
     delayObs.onNext(3);
     return Observable.empty();
   } else {
     return Observable.error(e);
   }
}
.doOnNext(sync -> {
    if(sync == null) {
      delayObs.onComplete();
    } else {
      delayObs.onNext(getNextInterval(sync));
    }
}
.compose(rxSchedulersAbs.getIOToMainTransformer())
.subscribe();

另一方面,如果您需要更改使用您刚收到的响应中的数据发出的请求,this might be useful .

关于android - RXJava + 改造。每 n 秒重复一次请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42609270/

相关文章:

java - 在android中请求最近的城市

java - 如何在 ListView 项目的对话框上显示自定义消息

android - 在 Android 相机上拍照,无需点击按钮或屏幕

android - Retrofit 2 - 如何为不同端点设置动态缓存时间

java - 适配 RxJava 1.1.5 到 Reactor Core 3.1.0.M3

android - Flutter:如何将 DropdownButton 菜单图标对齐到最右边?

Android 通过移动网络强制 OkHttp 请求

Android Retrofit如何从api获取图片

java - rxjava中如何不断地将数据流式传输到客户端?

kotlin - 发生错误时防止停止Kotlin流