使用retrofit2+rxjava1进行网络请求。在使用retryWhen()进行延迟重试时
@Override
public Observable<?> call(Observable<? extends Throwable> attempts) {
return attempts
.flatMap(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(Throwable throwable) {
if (++retryCount <= maxRetries) {
if (interval > 0) {
retryDelaySecond = retryDelaySecond + interval;
}
return Observable.timer(retryDelaySecond,
TimeUnit.SECONDS);
}
return Observable.error(throwable);
}
});
}
如果在重试过程中断一下网再恢复,就会出现不触发回调了,永远处于订阅中,但其实网络请求已经结束了。一直断网或者一直有网就是正常的,求指教啥原因啊,如何解决
解决了。我另外有一个无限重试的socket任务,单独弄了个线程池
threadExecutor.execute(() ->
Observable.just(...)
.flatMap(a -> {
...
throw new CustomizeException("连接被关闭");
})
.retryWhen(new RetryWithDelay(Integer.MAX_VALUE,10))
.subscribe(subscriber = new BaseNetSubscriber<Void>(null) {
@Override
public void onNext(Void unused) {
LogUtils.d(TAG, "连接结束");
stopSelf();
}
}));
不知道为什么,这个会影响到其它接口的重试,改成这个就正常了
Observable.just(...)
.subscribeOn(Schedulers.from(threadExecutor))
.flatMap(a -> {
....
throw new CustomizeException("连接被关闭");
})
.retryWhen(new RetryWithDelay(Integer.MAX_VALUE,10))
.subscribe(subscriber = new BaseNetSubscriber<Void>(null) {
@Override
public void onNext(Void unused) {
LogUtils.d(TAG, "连接结束");
stopSelf();
}
};
有没有运行日志发给我看一下
断网,网络请求就中断了,如果你想继续,你只能重新递归这个方法了。最好不要递归🤣