RxJava网络请求和缓存

Ego*_*uba 13 android rx-java

我正在寻求一个流程的例子,我试图在RxJava的帮助下实现.

假设我想显示一个数据列表.流程应如下所示:

  1. 读缓存.如果它包含数据,请显示;
  2. 向服务器发送API请求:

    如果它返回了数据,则将其缓存并显示.

    如果它返回并且错误且没有缓存数据,则显示错误.

    如果它返回并且错误并且有缓存的内容,那么什么都不做.

现在我有一种方法可以做类似的事情(从Jake的u2020获得很多灵感).主要区别在于它使用内存缓存,这意味着不需要单独Observable从缓存中读取,它可以同步完成.

我不知道如何组合两个observable(一个用于从缓存读取而另一个用于API调用)并获得上述流程.

有什么建议?

zsx*_*ing 1

这是我的解决方案:

readDataFromCache().defaultIfEmpty(null)
        .flatMap(new Func1<Data, Observable<Data>>() {

            @Override
            public Observable<Data> call(final Data data) {
                if (data == null) {
                    // no cache, show the data from network or throw an error
                    return apiCall();
                } else {
                    return Observable.concat(
                            Observable.just(data),
                            // something cached, show the data from network or do nothing.
                            apiCall().onErrorResumeNext(Observable.<Data>empty()));
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

我没有添加subscribeOnandobserveOn因为我不确定readDataFromCache()是否应该使用ioScheduleror uiScheduler