список итераций с комнатой rxjava один за другим - PullRequest
0 голосов
/ 11 октября 2019

У меня есть список, который я получаю из комнаты db, и я хочу получить этот элемент списка один за другим с помощью rxjava. Когда я добавляю customer и flowable, тогда он дает только первый индекс, поэтому добавляю его в single. Это работает для меня, но я хочу знать, что это правильный способ получить или нет, пожалуйста, дайте мне знать, что.

@Query("SELECT * FROM ContactDao")
Single<list<contactdao>> getAllContacts();

моя функция класса активности ->

Utility.initDatabase().dbHelper().getAllContacts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<list<contactdao>>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}

@Override
public void onSuccess(List<contactdao> contactDaos) {
Log.e(TAG, "onSuccess: " + contactDaos.size());

Observable.fromIterable(contactDaos)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<contactdao>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}

@Override
public void onNext(ContactDao contactDao) {
Log.e(TAG, "onNext: " + contactDao + firstName);
}

@Override
public void onError(Throwable e) {

}

@Override
public void onComplete() {

}
});

}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}
});

1 Ответ

0 голосов
/ 11 октября 2019

Вместо создания новой цепочки в обратном вызове наблюдателя, вы можете связать вызов с базой данных с помощью итерации и иметь одну цепочку:

Utility.initDatabase().dbHelper().getAllContacts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMapObservable(contactDaos -> Observable.fromIterable(contactDaos))
.subscribe(new Observer<contactdao>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}

@Override
public void onNext(ContactDao contactDao) {
Log.e(TAG, "onNext: " + contactDao + firstName);
}

@Override
public void onError(Throwable e) {

}

@Override
public void onComplete() {

}
});
...