android,java rx,architecture,Concatenate Observables

时间:2017-01-15 01:44:54

标签: java android architecture rx-java

我正在学习java-rx。我正在开发一个应用程序,我想考虑以下几点

  • 用户可以脱机工作或连接非常糟糕。
  • 始终向用户显示更新的数据
  • 我想优先考虑数据的可视化。有了这个,我的意思是我不想等待网络的超时,然后去查询数据到磁盘。

我在应用程序中开发了以下可观察对象

Observable<Data> disk = ...;  
Observable<Data> network = ...;
Observable<Data> networkWithSave = network.doOnNext(data -> {  
  saveToDisk(data);
});

我还宣布了以下订阅者

new Observer<List<Items>>() {
                    @Override
                    public void onCompleted() {
                        mView.hideProgressBar();
                    }

                    @Override
                    public void onError(Throwable e) {
                        mView.showLoadingError();
                    }

                    @Override
                    public void onNext(List<Vault> vaults) {
                        processItems(vaults);
                    }
                }

我希望收到关于连接这些Observable的正确方法的一些建议。

我希望首先显示磁盘上的数据。然后检查网络,如果有新数据,则更新它们。

网络查询可能是并行的,但如果它在磁盘不显示磁盘数据之前运行。

非常感谢你。 对不起我的英文

2 个答案:

答案 0 :(得分:1)

我认为disk.concatWith(networkWithSave).subscribe(ui)会这样做。

但磁盘数据(如果有的话)总是先行。

如果磁盘上没有数据,则必须完成磁盘源而不发送任何消息。磁盘源绝不能完成,因为这会有效阻止您的网络源。

在您的UI订阅者中,如果已从磁盘获取数据,您可能希望静默忽略onError(来自网络)。

答案 1 :(得分:1)

也许Dan Lew Blog Post可以为您提供想法。