RxJava 对象转换
RxJava Object Transformation
这就是我想要做的:
我需要使用 RxJava 和 Retrofit 链接两个网络调用。
第一次调用检索 Observable<User>
.
第二次调用检索附加信息 Observable<UserAdditionalInfo>
,需要附加到先前检索的 Observable<User>
。
然后,检索带有附加信息的 Observable<User>
。
我试过 flatMap
运算符:
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(...)
语句的return类型,如果省略最后的.subscribe(...)
部分,则为Observable<User>
.
这就是我想要做的:
我需要使用 RxJava 和 Retrofit 链接两个网络调用。
第一次调用检索
Observable<User>
.第二次调用检索附加信息
Observable<UserAdditionalInfo>
,需要附加到先前检索的Observable<User>
。然后,检索带有附加信息的
Observable<User>
。
我试过 flatMap
运算符:
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(...)
语句的return类型,如果省略最后的.subscribe(...)
部分,则为Observable<User>
.