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

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

Похожие вопросы