繁体   English   中英

使用Retrofit进行连续的api调用并返回可观察的

[英]Making successive api calls with Retrofit and returning observable

我有一个包含以下界面的改造服务

public interface ApiService {

    @GET("/users/me")
    Observable<Account> authenticateUser(@Header("Authorization") String auth);

    @GET("/membership/{userId}")
    SubscriptionStatus getSubscriptionStatus(@Path("userId") String userId);
}

我想定义一个方法来进行api调用以获取包含userId的Account,然后使用此ID进行第二次API调用以获取用户订阅状态。 SubscriptionStatus包含一个布尔值,如果它是真的,我希望该方法返回Observable。

这就是我到目前为止的方式:

public Observable<Account> doLogin(ApiService service , String credentials) {

return service.authenticateuser(base64) // gets Account observable 
       .doOnNext(account -> {
            currentAccount = account; // setting the Account Variable
        })
        .flatMap(account -> service.getSubscriptionStatus(account.getUserId())) // get Account Subscription status

        ... //unsure where to go from here I need to check 
           //the subscriptionStatus object and return account           
           //observable if condition is valid
}

怎么样

return service.authenticateuser(base64) // gets Account observable 
   .doOnNext(account -> {
        currentAccount = account; // setting the Account Variable
    })
    .flatMap(account -> 
         service.getSubscriptionStatus(account.getUserId())
         .filter(status -> status.isActive()) // don't let status pass if not active
         .map(status -> account)  // we actually need the original account
    );

如果您需要帐户和状态,最后一个map()应该返回两个的复合类型

 .map(status -> new Pair<>(account, status))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM