请求在服务器成功响应后每 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/