Login(@Body Merchant mer-6ren">
gpt4 book ai didi

android - Retrofit,如果第一个成功,RxJava 发出请求

转载 作者:行者123 更新时间:2023-11-29 16:56:48 26 4
gpt4 key购买 nike

基本上我必须先登录用户,如果成功,我必须添加商店并注销。下面给出改造界面

@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);

Observables 是给定的

Observable<BaseResponse<String>> loginObs = apiService.Login(merchant);
Observable<BaseResponse<Merchant>> addShopObs = apiService.addShop(shop);
Observable<BaseResponse<String>> logoutObs = apiService.Logout();

基本响应有一个成功字段,我应该根据它来决定登录是否成功。我想我可以使用 map 来验证第一次登录观察者是否成功,但如果登录失败我不知道该怎么办。我怎样才能取消整个链条?

最佳答案

您可以从 loginObs 开始,根据登录成功将 loginResponse 平面映射到另一个 observable,因此返回 addShopObs 或返回一个错误 observable

(这将以错误终止链)

然后就可以继续正常平映射商户对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.*/
});

关于android - Retrofit,如果第一个成功,RxJava 发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44739267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com