@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) если сети нет, из базы
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
1. Брать данные из БД - чтобы не показывать пользователю пустой экран
2. параллельно идти в сеть
3. полученные данные класть в БД
4. Обновить данные на экране (снова из БД)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ideas World Симферополь
от 100 000 ₽
Почта Банк Москва
от 207 000 до 240 000 ₽
от 120 000 до 200 000 ₽
08 апр. 2020, в 21:19
10000 руб./за проект
08 апр. 2020, в 20:18
35000 руб./за проект
08 апр. 2020, в 19:41
2000 руб./за проект