@terminator-light

Как правильно получать данные с бекенда?

заметил, что данный способ не совсем верный: если впервые получить данные с сервера, потом перезайти в приложение, возвратятся данные из локальной базы. А в это время данные на сервере могут обновиться, получается, всегда несвежие данные будут видны

public Maybe<List<Review>> getReviewsByProductId(int id) {
        Observable<List<Review>> remote = remoteDataSource.getReviewsByProductId(id)
                .doOnNext(reviews -> localDataSource.insertReviews(reviews))
                .doOnNext(reviews -> cacheDataSource.putReviews(id, reviews));
        Observable<List<Review>> local = localDataSource.getReviewsByProductId(id)
                .filter(reviews -> !reviews.isEmpty())
                .doOnNext(reviews -> cacheDataSource.putReviews(id, reviews));

        Observable<List<Review>> cache = cacheDataSource.getReviewsByProductId(id);

        return Observable.concat(cache, local, remote)
                .firstElement()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
    }

Как правильно реализовать такое?
1) получить данные из сети;
2) при следующих обращениях брать из кеша
3) если сети нет, из базы
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
1. Брать данные из БД - чтобы не показывать пользователю пустой экран
2. параллельно идти в сеть
3. полученные данные класть в БД
4. Обновить данные на экране (снова из БД)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 80 000 до 110 000 руб.
Webbankir Москва
До 200 000 руб.
Рокетбанк Москва
До 190 000 руб.
25 авг. 2019, в 23:48
4000 руб./за проект
25 авг. 2019, в 22:35
1000 руб./за проект
25 авг. 2019, в 22:10
3000 руб./за проект