RxJava:网络&缓存发出部分结果

时间:2016-12-27 15:26:35

标签: android android-sqlite retrofit rx-java retrofit2

我有一个简单的案例需要解决,但我还没有找到如何用RxJava实现它。一方面我有Retrofit(网络),另一方面我的SQLite数据库(缓存)。

我想要达到的目标是:

  • 如果缓存中没有任何内容:调用API
  • 如果缓存中有某些内容:
    • 如果数据集是最新的:仅发出db
    • 的结果
    • 如果数据集已过时:发出过时的结果,然后调用API(并发出结果)

您是否知道如何使用Rxjava(版本1)实现此行为?

非常感谢!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

这样的事情应该有效:

    Observable<Foo> cache = getCacheFoo();
    Observable<Foo> network = getNetworkFoo();

    Observable<Foo> foos = cache.flatMap(cachedFoo -> {
        if (cachedFoo == null) {
            // if the cache returns nothing, return the network observable
            return network;
        } else if (cachedFoo.isStale()) {
            // if the cache is stale, return the data, but follow up with the network
            return Observable.just(cachedFoo).concatWith(network);
        } else {
            // otherwise the data is fresh, simply return it
            return Observable.just(cachedFoo);
        }
    });