Retrofit,如果第一个成功,RxJava 发出请求
Retrofit, RxJava make a request if first one is successful
基本上我必须先登录用户,如果成功,我必须添加商店并注销。改装界面如下
@POST("merchant/register")
Observable<BaseResponse<String>> Login(@Body Merchant merchant);
@PUT("merchant/{username}")
Observable<BaseResponse<Merchant>> Logout();
@POST("shop")
Observable<BaseResponse<Shop>> addShop(@Body Shop shop);
Observable 是按给定的方式创建的
Observable<BaseResponse<String>> loginObs = apiService.Login(merchant);
Observable<BaseResponse<Merchant>> addShopObs = apiService.addShop(shop);
Observable<BaseResponse<String>> logoutObs = apiService.Logout();
基本响应有一个成功字段,我应该根据它来决定登录是否成功。我想我可以使用地图来验证第一次登录观察者是否成功,但如果登录失败我不知道该怎么办。我怎样才能取消整个链条?
您可以从 loginObs 开始,根据登录成功将 loginResponse 平面映射到另一个 observable,因此 return addShopObs 或 return 一个错误 observable
(这将以错误终止链)
然后就可以继续正常flatMap商户对logoutObs的响应了。
实现方法如下:
loginObs(merchant)
.flatMap(loginResponse -> {
if (/*successful check*/)
return addShopObs;
else
return Observable.error(new Exception("Login failed!"));
// or throw your own exception, this will terminate the chain and call onError on the subscriber.
})
.flatMap(merchantResponse -> logoutObs)
.subscribe(logoutResponse -> {
/*all operations were successfull*/
}, throwable -> {
/*an error occurred and the chain is terminated.*/
});
基本上我必须先登录用户,如果成功,我必须添加商店并注销。改装界面如下
@POST("merchant/register")
Observable<BaseResponse<String>> Login(@Body Merchant merchant);
@PUT("merchant/{username}")
Observable<BaseResponse<Merchant>> Logout();
@POST("shop")
Observable<BaseResponse<Shop>> addShop(@Body Shop shop);
Observable 是按给定的方式创建的
Observable<BaseResponse<String>> loginObs = apiService.Login(merchant);
Observable<BaseResponse<Merchant>> addShopObs = apiService.addShop(shop);
Observable<BaseResponse<String>> logoutObs = apiService.Logout();
基本响应有一个成功字段,我应该根据它来决定登录是否成功。我想我可以使用地图来验证第一次登录观察者是否成功,但如果登录失败我不知道该怎么办。我怎样才能取消整个链条?
您可以从 loginObs 开始,根据登录成功将 loginResponse 平面映射到另一个 observable,因此 return addShopObs 或 return 一个错误 observable
(这将以错误终止链)
然后就可以继续正常flatMap商户对logoutObs的响应了。
实现方法如下:
loginObs(merchant)
.flatMap(loginResponse -> {
if (/*successful check*/)
return addShopObs;
else
return Observable.error(new Exception("Login failed!"));
// or throw your own exception, this will terminate the chain and call onError on the subscriber.
})
.flatMap(merchantResponse -> logoutObs)
.subscribe(logoutResponse -> {
/*all operations were successfull*/
}, throwable -> {
/*an error occurred and the chain is terminated.*/
});