etrofit2+rxjava1网络请求问题

使用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();
                    }
                };

有没有运行日志发给我看一下

断网,网络请求就中断了,如果你想继续,你只能重新递归这个方法了。最好不要递归🤣