Android RXJava+;改装。每n秒重复一次请求

Android RXJava+;改装。每n秒重复一次请求,android,retrofit,rx-java,repeat,Android,Retrofit,Rx Java,Repeat,服务器成功响应后,每n秒重复一次请求。但是查询时间中有一个字段,它改变了查询本身。RepeatWhen-不适合此原因。告诉我,我怎样才能解决这个问题?(谢谢) AtomicBoolean onComplete=新的AtomicBoolean(true); 可观测间隔(3,时间单位秒) .compose(rxSchedulersAbs.getiotomaintersformer()) .map(新函数1(){ @凌驾 公众可观察呼叫(长勾号){ if(onComplete.get()){ onCo

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

AtomicBoolean onComplete=新的AtomicBoolean(true);
可观测间隔(3,时间单位秒)
.compose(rxSchedulersAbs.getiotomaintersformer())
.map(新函数1(){
@凌驾
公众可观察呼叫(长勾号){
if(onComplete.get()){
onComplete.set(false);
返回requestCreator.getSyncMessage();
}
返回null;
}
}).map(同步->{
如果(同步!=null)
onComplete.set(真);
返回同步;
}).subscribe();
如果您想根据服务器返回的内容更改请求的频率,我建议使用
行为主题

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();
BehaviorSubject delayObs=BehaviorSubject.create(3);
德莱奥布斯
.serialize()
.flatMap(延迟->可观察计时器(延迟,时间单位。秒))
.flatMap(虚拟->requestCreator.getSyncMessage())
.onErrorResumeNext(e->{
if(IOException的实例){
delayObs.onNext(3);
return obobalable.empty();
}否则{
返回可观测误差(e);
}
}
.doOnNext(同步->{
如果(sync==null){
delayObs.onComplete();
}否则{
delayObs.onNext(getNextInterval(sync));
}
}
.compose(rxSchedulersAbs.getiotomaintersformer())
.subscribe();

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

感谢您的帮助。困难在于我需要每3秒组织一次池,但查询中的一个字段会发生更改。此外,还需要检查上一次请求是否成功,并从IT
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();