java - RxJava 对象转换

标签 java retrofit rx-java

这就是我想要做的:

我需要使用 RxJava 和 Retrofit 链接两个网络调用。

  1. 第一个调用检索 Observable<User> .

  2. 第二次调用检索附加信息 Observable<UserAdditionalInfo> , 需要附加到 Observable<User>以前检索过。

  3. 然后,检索 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/

相关文章:

java - 如何在java swing组件中创建多个框架

android - 在 Authenticator 中设置 SharedPreference?

android - 如何使用 RxJava 实现 NullObject 模式

java - 如何在android studio中成对保存问题和答案?

Java 在文件中存储 boolean 数组并快速读取

java.rmi.ServerException : RemoteException occurred in server thread; ClassNotFoundException

android - 改造回调之间的区别

android - 改造返回 bool 值

android - rxJava 和改造而不是 IntentService + CursorLoader?

java - rxJava : composing single with completable and return single