-
Подключить RxJava2 к Retrofit
- Добавить
retrofit2:adapter-rxjava2в зависимости - Изменить
CatsService.getCatFact()чтобы возвращалSingle<Fact>вместоCall<Fact>
- Добавить
-
Переписать CatsViewModel на RxJava2
- Убрать колбеки из
initблока - Реализовать
getFacts()с помощью RxJava2 - Использовать
CompositeDisposableдля управления подписками, не забыть отписаться
- Убрать колбеки из
-
Реализовать LocalCatFactsGenerator.generateCatFact()
- Возвращать
Single<Fact>со случайным фактом изR.array.local_cat_facts - Использовать
Single.fromCallable()илиSingle.just()
- Возвращать
-
Реализовать LocalCatFactsGenerator.generateCatFactPeriodically()
- Эмитить
Factкаждые 2 секунды - Пропускать дублирующиеся факты
- Эмитить
-
Реализовать CatsViewModel.getFacts()
- Каждые 2 секунды запрашивать факт из сети
- При ошибке сети - использовать
LocalCatFactsGenerator.generateCatFact()как фоллбек - Использовать
onErrorResumeNext()для обработки ошибок
Single- для одноразовых операцийFlowable- для периодических/непрерывных потоковCompositeDisposable- для управления подпискамиdistinctUntilChanged()- для исключения дубликатовonErrorResumeNext()- для фоллбека при ошибках
- Факты обновляются каждые 2 секунды
- При отключенном интернете показываются локальные факты
- Нет дублирующихся фактов подряд