Android 如何做出RxJava决策?

Android 如何做出RxJava决策?,android,rx-java,retrofit2,rx-android,Android,Rx Java,Retrofit2,Rx Android,我是RxJava新手,但我想在我的android项目中尝试改型2。应用程序支持身份验证,对服务器的所有请求都必须在头中包含令牌,若令牌无效,我必须发送身份验证请求 这是我的Api接口 公共接口ApiRx{ @FormUrlEncoded @发布(“授权”) 可观察的makeAuth(@FieldMap-fields); @获取(“更新”) 可观察的getUpdates(@Query(“date”)字符串日期); }您最好将您的回报类型更改为可观察的,因此: public interface A

我是RxJava新手,但我想在我的android项目中尝试改型2。应用程序支持身份验证,对服务器的所有请求都必须在头中包含令牌,若令牌无效,我必须发送身份验证请求

这是我的Api接口

公共接口ApiRx{
@FormUrlEncoded
@发布(“授权”)
可观察的makeAuth(@FieldMap-fields);
@获取(“更新”)
可观察的getUpdates(@Query(“date”)字符串日期);

}
您最好将您的回报类型更改为
可观察的
,因此:

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);
}
公共接口ApiRx{
@FormUrlEncoded
@发布(“授权”)
可观察的makeAuth(@FieldMap-fields);
@获取(“更新”)
可观察的getUpdates(@Query(“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();
api.getUpdates(日期)
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(响应){
如果(!response.issucess()&&response.code()==403){
//返回makeAuth(字段)
//.flatMap(保存身份验证)
//.flatMap(返回getUpdates)
//.flatMap(返回Observable.just(response.body())
}
否则{
返回Observable.just(response.body());
}
}
})
.subscribe();

我不得不在if auth failed一节中含糊其辞,因为我不知道您的系统是如何设置的,但它应该会给您提供正确的想法。

您最好将您的返回类型更改为可观察的
,因此:

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);
}
公共接口ApiRx{
@FormUrlEncoded
@发布(“授权”)
可观察的makeAuth(@FieldMap-fields);
@获取(“更新”)
可观察的getUpdates(@Query(“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();
api.getUpdates(日期)
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(响应){
如果(!response.issucess()&&response.code()==403){
//返回makeAuth(字段)
//.flatMap(保存身份验证)
//.flatMap(返回getUpdates)
//.flatMap(返回Observable.just(response.body())
}
否则{
返回Observable.just(response.body());
}
}
})
.subscribe();
我不得不在if auth failed部分有点含糊不清,因为我不知道你的系统是如何设置的,但它应该给你一个正确的想法