Правильная операция приема для слияния двух наблюдаемых - PullRequest
0 голосов
/ 25 февраля 2019

Я написал следующий класс для доступа к своему репо, который включает в себя как удаленное, так и локальное репо.

public class VenuesRepoImpl implements VenuesRepo {

private VenuesLocalRepo venuesLocalRepo;
private VenuesRemoteRepo venuesRemoteRepo;

public VenuesRepoImpl(VenuesLocalRepo venuesLocalRepo, VenuesRemoteRepo venuesRemoteRepo) {
    this.venuesLocalRepo = venuesLocalRepo;
    this.venuesRemoteRepo = venuesRemoteRepo;
}

@Override
public Observable<List<Venue>> getAllVenues(String ll, int offset) {
    return Observable.merge(venuesRemoteRepo.getAllVenues(ll, offset)
                    .doOnNext(venues -> venuesLocalRepo.addVenues(venues)).subscribeOn(Schedulers.io()),
            venuesLocalRepo.getAllVenues().subscribeOn(Schedulers.io()));
}



@Override
public void deleteAllVenues() {
    Completable.fromAction(() -> venuesLocalRepo.deleteAll()).subscribeOn(Schedulers.io());

}

}

, но Observable.merge дублирует мой элемент, он имеет оба APIи дб.Как я могу получить доступ к элементам БД только тогда, когда API недоступен?

1 Ответ

0 голосов
/ 25 февраля 2019

Вы должны использовать concat() вместо merge().

Вы можете следовать этому шаблону:

// Our sources (left as an exercise for the reader)
Observable<Data> memory = ...;
Observable<Data> disk = ...;
Observable<Data> network = ...;

// Retrieve the first source with data
Observable<Data> source = Observable
  .concat(memory, disk, network)
  .first();

Подробнее здесь

...