【问题标题】:Making successive api calls with Retrofit and returning observable使用 Retrofit 进行连续的 api 调用并返回 observable
【发布时间】:2017-06-19 20:14:50
【问题描述】:

我有一个改造服务,包含如下界面

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
}

【问题讨论】:

    标签: android retrofit rx-java retrofit2 rx-java2


    【解决方案1】:

    怎么样

    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() 应该返回两者中的一些 composite type

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

    【讨论】:

    • 非常感谢这项工作,你知道我如何处理和返回每个 API 调用的错误吗?
    猜你喜欢
    • 2015-11-25
    • 2021-01-13
    • 2017-11-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多