这就是我想要做的:
我需要使用 RxJava 和 Retrofit 链接两个网络调用。
第一个调用检索
Observable<User>
.第二次调用检索附加信息
Observable<UserAdditionalInfo>
, 需要附加到Observable<User>
以前检索过。然后,检索
Observable<User>
附有附加信息。
我试过 flatMap
运算符(operator):
Observable<User> userObservable = new RestClient().getUserById(1234);
userObservable.flatMap(new Func1<User, Observable<?>>() {
@Override
public Observable<?> call(User user) {
OtherRestClient otherRestClient = new OtherRestClient();
// Second network call. It retrieves an Observable<UserAdditionalInfo>
otherRestClient.getUserAdditionalInfo(user.getUserCode());
// I think, here should be the code that attaches the additional info
// to the `user` parameter of the call method and return an Observable<User>
return null;
}
}).subscribe(o -> System.out.println(o));
最佳答案
这是你需要的吗?
Observable<User> userObservable = new RestClient().getUserById(1234);
userObservable.flatMap(new Func1<User, Observable<User>>() {
@Override
public Observable<User> call(final User user) {
OtherRestClient otherRestClient = new OtherRestClient();
// Second network call. It retrieves an Observable<UserAdditionalInfo>
Observable<UserAdditionalInfo> additionalObservable = otherRestClient.getUserAdditionalInfo(user.getUserCode());
return additionalObservable.map(new Func1<UserAdditionalInfo, User>() {
@Override
public User call(final UserAdditionalInfo uai) {
user.setXXX(uai.getXXX());
// ... any additional calls
return user;
}
});
}
}).subscribe(o -> System.out.println(o));
userObservable.flatMap(...)
的返回类型语句,如果我们省略 .subscribe(...)
最后的部分是Observable<User>
.
关于java - RxJava 对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33030847/