Лучший способ получить список из Observable в Rxjava - PullRequest
0 голосов
/ 22 февраля 2019

Я просто изучаю Rxjava в одном из своих приложений для Android и застрял в одном месте, честно говоря, я очень новичок в этой библиотеке, так что не волнуйтесь, если мой вопрос кого-то расстроит; -)

Итак, я пытаюсь получить доступ к базе данных комнат с помощью RxJava, где я возвращаю список наблюдаемых, как только я получаю этот наблюдаемый, я пытаюсь использовать оператор карты, чтобы получить список идентификаторов и снова запросить базу данных, которая сновавозвращает мне список наблюдаемых, но оператор карты ожидает, что список будет возвращен.Как я могу решить эту проблему, пожалуйста, предложите?

Ниже приведен фрагмент кода:

  private void getAllPcbs() {
    isLoading.setValue(true);
    getCompositeDisposable().add(
            getRepositoryManager().loadAllPcbDetails()
                    .flatMap((Function<List<PcbDetails>, ObservableSource<?>>) pcbDetails -> {
                        List<Long> pcbList = new ArrayList<>();
                        for (PcbDetails details : pcbDetails)
                            pcbList.add(details.getPcbId());
                        return getRepositoryManager().loadAllPcbs(pcbList);
                    })
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(this::onSuccess, this::onError)
    );
}

private void onError(Throwable throwable) {
    isLoading.setValue(false);

}

private void onSuccess(Object o) {
    isLoading.setValue(false);
    pcbList.setValue((List<Pcb>) o);
}



public interface DbHelper {
    Observable<List<PcbDetails>> loadAllPcbDetails();
    Observable<List<Pcb>> loadAllPcbs(List<Long> pcbIdList);
}

1 Ответ

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

Иди как

        getRepositoryManager().loadAllPcbDetails()
            .flatMapIterable {
                    listPcbDetail-> listPcbDetail
                // listPcbDetail is ArrayList<PcbDetails>
                // Converts your list of ids into an Observable
                // which emits every item in the list           
            }
            .flatMap { pcbDetail ->
                // pcbDetail is PcbDetails
                getRepositoryManager().loadAllPcbs(pcbDetail.pcbIdList)
            }.subscribe { listPcb ->
                // listPcb is ArrayList<Pcb>
            }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...