使用 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 调用以获取包含用户 ID 的帐户,然后使用此 ID 进行第二个 API 调用以获取用户订阅状态。 SubscriptionStatus 包含一个布尔值,如果它为真,我希望该方法能够 return 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() 应该 return 两者中的一些 composite type:
.map(status -> new Pair<>(account, status))
我有一个包含以下接口的改装服务
public interface ApiService {
@GET("/users/me")
Observable<Account> authenticateUser(@Header("Authorization") String auth);
@GET("/membership/{userId}")
SubscriptionStatus getSubscriptionStatus(@Path("userId") String userId);
}
我想定义一个方法来进行 api 调用以获取包含用户 ID 的帐户,然后使用此 ID 进行第二个 API 调用以获取用户订阅状态。 SubscriptionStatus 包含一个布尔值,如果它为真,我希望该方法能够 return 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() 应该 return 两者中的一些 composite type:
.map(status -> new Pair<>(account, status))