使用带重试的异步网络调用改造 2 个顺序请求

Retrofit 2 sequential Requests using asynchronous network calls with retry

我正在尝试使用改装向 api 发送网络请求,当我返回响应时,在另一个调用中使用该响应的一部分,我使用了调用,并按照建议使用了 rxjava,但是我总是在第一个请求之前执行第二个请求

public interface ChannelRequest {

    @POST("authenticate_with_options")
    @FormUrlEncoded
    Observable<Channel> getAuthenticationChannel(@FieldMap Map<String, String> params);


    @POST("check")
    @FormUrlEncoded
    Observable<Channel> getAuthenticationStatus(@FieldMap Map<String, String> params);
}

ss

        Observable<Channel> call2 = mAPI.gettheChannel().getAuthenticationStatus(Constants.HTTP.PARAMSAUTH);
        Observable.interval(3, TimeUnit.SECONDS).retry(3);
        Subscription subscription2 = call2
                .subscribeOn(Schedulers.io()) // optional if you do not wish to override the default behavior
                .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Channel>() {


                    @Override
                    public void onCompleted() {


                    }

                    @Override
                    public void onError(Throwable e) {

                        if (e instanceof HttpException) {
                            HttpException response = (HttpException) e;
                            int code = response.code();
                        }
                    }

                    @Override
                    public void onNext(Channel channel) {

                        Log.d("AuthStatus", "onResponse: " + Channel.getChannel());

                    }
                });

我不确定我是否必须再使用 RxJava,实现这个的最佳实践是什么?

谢谢

您的代码看起来不像您的问题(因为在您的示例中只有一次调用您的 api)

不过,您可以查看运算符 flatMap 来调用另一个可观察对象,并返回上一次调用的结果。

 mAPI.gettheChannel().getAuthenticationStatus(Constants.HTTP.PARAMSAUTH)
                     // use the result from a previous call to perform another one
                     .flatMap(result -> mApi.gettheChannel().getAuthentificationChannel(result))
                     .subscribeOn(Schedulers.io()) // optional if you do not wish to override the default behavior
                     .observeOn(AndroidSchedulers.mainThread())
                     .subscribe();