我是RxJava的新手,但想在我的android项目中使用Retrofit 2进行尝试。应用程序支持auth,所有对服务器的请求都必须在标头中包含令牌,如果令牌无效,我必须发送auth请求。
这是我的Api界面
public interface ApiRx {
@FormUrlEncoded
@POST("auth")
Observable<AuthResponse> makeAuth(@FieldMap Map<String, String> fields);
@GET("update")
Observable<UpdateResponse> getUpdates(@Query("date") String date);
}
&#13;
但我现在不知道如何使用Rx组织if-else语句,如果更新请求因auth原因失败,请发送auth请求然后重试更新请求。
也许有人有simillar案例,如果你举例说明如何实现这个案例会很好。
答案 0 :(得分:2)
您最好将退货类型更改为Observable<Response<>>
,这样会:
public interface ApiRx {
@FormUrlEncoded
@POST("auth")
Observable<Response<AuthResponse>> makeAuth(@FieldMap Map<String, String> fields);
@GET("update")
Observable<Response<UpdateResponse>> getUpdates(@Query("date") String date);
}
这样您就可以访问服务器响应以及数据。完成此操作后,您可以执行以下请求:
api.getUpdates(date)
.flatMap(new Func1<Response<UpdateResponse>, Observable<UpdateResponse>>() {
@Override
public Observable<UpdateResponse> call(Response<UpdateResponse> response) {
if (!response.isSuccess() && response.code() == 403) {
// return makeAuth(fields)
// .flatMap(save auth)
// .flatMap(return getUpdates)
// .flatMap(return Observable.just(response.body())
}
else {
return Observable.just(response.body());
}
}
})
.subscribe();
我在if auth失败的部分中不得不有点模糊,因为我不知道你的系统是如何设置的,但它应该给你正确的想法。