使用带重试的异步网络调用改造 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();
我正在尝试使用改装向 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();