Обновление данных раз в N секунд

88
20 сентября 2021, 17:30

Есть локальный источник данных:

Observable<Data> getData();

Есть запрос, чтобы их обновить:

Completable updateData();

Хочу чтобы данные начинали обновляться раз в N секунд, если на них подписаны. Что сделал:

Observable<Object> timer = Observable.interval(N, TimeUnit.SECONDS)
      .flatMap(tick -> updateData().toObservalbe()).retry(N * 1000);
Observable<Data> getUpdatableData(){
   return Observable.merge(timer, getData())
         .filter(o -> o instanceof Data)
         .map(o -> (Data) o);
}

Подскажите как избавиться от пары косяков:

  1. Если подписаться на getUpdatableData() несколько раз, то раз в 10 секунд будет происходить не одно обновление, а по количеству подписок.
  2. Надо избавиться от приведения типов после merge

Задача довольно типичная, но не могу найти хороших примеров.

READ ALSO
Ошибка NullPointerException при вставке данных из xml

Ошибка NullPointerException при вставке данных из xml

В android studio при запуске эмулятора вылетает такая ошибка -

134
при обучении по Шилдту (непонятен нюанс)

при обучении по Шилдту (непонятен нюанс)

код ниже работает все отлично-непонятно другое int miles мы не задавали значений (расстояния) а задали их int dist = 252; По идее же тут вместо miles должно...

172
Сохранение изменений MariaDB

Сохранение изменений MariaDB

Как сохранить результат запроса в таблицу?

115
Свой шрифт в Тильде html-блок

Свой шрифт в Тильде html-блок

Нужна помощь/советМне необходимо в конструкторе сайтов https://tilda

181