java - 如何摆脱嵌套的 RxJava 流?

标签 java android retrofit rx-java2

我有一系列对互联网、数据库的调用,结果我向用户显示了收集到的信息。现在我有非常丑陋的 3 级嵌套 RxJava 流。我真的想让它流畅易读,但我一直很努力。

我已经阅读了有关 Map、flatMap、zip 等的所有内容。无法让它们协同工作。

代码:调用api。在第一个流的 onSuccess 方法中接收到的信息放入数据库订阅另一个流,在第二个流的 onSuccess 方法中从数据库信息接收最终显示给用户。

科学怪人:

disposables.add(modelManager.apiCall()
                .subscribeOn(Schedulers.io())
                .observeOn(mainThread)
                .subscribeWith(new DisposableSingleObserver {

                  public void onSuccess(ApiResponse apiResponse) {

                        modelManager.storeInDatabase(apiResponse)
                       //level 1 nested stream:
                        disposables.add(modelManager.loadFromDatabas()
                                  .subscribeOn(Schedulers.io())
                                  .observeOn(mainThread)
                                  .subscribeWith(new DisposableSingleObserver{
                                    public void onSuccess(Data data) {
                                        view.showData(data);
                                    }
                                    public void onError(Throwable e) {
                                    }
                                }));
                    }
                    @Override
                    public void onError(Throwable e) {
                    }
                }));
    }

最佳答案

I already read everything about Map, flatMap, zip, etc. Cant' make things work together.

好吧,你错过了关于 flatMap一些 ,因为这就是它的用途;)


disposables.add(
    modelManager.apiCall()
        .subscribeOn(Schedulers.io())
        .doOnSuccess((apiResponse) -> {
            modelManager.storeInDatabase(apiResponse)
        })
        .flatMap((apiResponse) -> {
            modelManager.loadFromDatabase()
        })
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe((data) -> {
            view.showData(data);
        })
);

但是如果你使用像 Room 的 LiveData<List<T>> 这样的响应式(Reactive)数据库层支持,那么你实际上可以放弃 modelManager.loadFromDatabase()部分。

关于java - 如何摆脱嵌套的 RxJava 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560124/

相关文章:

java - Android注释处理-为不同的构建风格生成不同的代码

android - 媒体播放器在广播 Intent 停止后不会停止播放音频文件

java - Java等同于SecureString

java - 在CountingBloomFilter Hadoop中添加 key

android - 要删除哪些 Git 文件

android - 即使用户没有使用我的应用程序也更新 TextView

android - 在 android 中使用 auth Token 将数据发布到 Rest API 服务器时出错

android - 如何在改造中解析嵌套对象模型

retrofit - OkHttpClient无法解析方法setCache

java - ActionListener 是抽象的并且不会覆盖抽象方法 actionPerformed——尽管包含那个方法