2016-12-27 3 views
0

У меня есть простой случай для решения, но я еще не нашел, как реализовать его с RxJava. С одной стороны у меня есть Retrofit (сеть), а с другой стороны - база данных SQLite (кеш).RxJava: Сеть и кеш испускают частичные результаты

То, что я хотел бы достичь, это:

  • Если нет ничего в кэше: вызов API-интерфейс
  • Если есть что-то в кэше:
    • , если набор данных до -to-date: испускать только результаты из db
    • , если набор данных устарел: испустить устаревшие результаты, а затем вызвать API (и испустить результаты)

Вы знаете, как реализовать это поведение с помощью Rxjava (версия 1)?

Большое спасибо!

ответ

0
+0

Я знал, но особенность здесь состоит в том, чтобы испускать частичные результаты в последнем случае. – g123k

+0

@ g123k использует любую реактивную базу данных: StorIO, SQLBrite (рекомендую!), Realm (не вентилятор) –

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); 
     } 
    });