用rxjava逐一迭代列出android房间

用rxjava逐一迭代列出android房间,android,rx-java,android-room,rx-android,Android,Rx Java,Android Room,Rx Android,我有一个从数据库室得到的列表,我想用rxjava一个接一个地得到该列表项。当我添加consumer和flowable时,它只给出第一个索引,所以将其添加到single中。这对我有用,但我想知道这是取回还是不取回的正确方法,请让我知道 @Query("SELECT * FROM ContactDao") Single<list<contactdao>> getAllContacts(); @Query(“从ContactDao中选择*) 单getAllContacts()

我有一个从数据库室得到的列表,我想用rxjava一个接一个地得到该列表项。当我添加consumer和flowable时,它只给出第一个索引,所以将其添加到single中。这对我有用,但我想知道这是取回还是不取回的正确方法,请让我知道

@Query("SELECT * FROM ContactDao")
Single<list<contactdao>> getAllContacts();
@Query(“从ContactDao中选择*)
单getAllContacts();
我的活动类函数-->

Utility.initDatabase().dbHelper().getAllContacts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新的SingleObserver(){
@凌驾
认购的公共无效(一次性d){
可合成。添加(d);
}
@凌驾
成功时公共无效(列出联系人){
Log.e(标记“onSuccess:+contactDaos.size());
可观察。可从可观察(contactDaos)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
可合成。添加(d);
}
@凌驾
public void onNext(ContactDao ContactDao){
Log.e(标签“onNext:+contactDao+firstName”);
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});
}
@凌驾
公共无效申报人(可丢弃的e){
e、 printStackTrace();
}
});

您可以通过迭代将对数据库的调用链接起来,并拥有一个单链,而不是在观察者的回调中创建一个新链:

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() {

}
});
Utility.initDatabase().dbHelper().getAllContacts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMapObservable(contactDaos->Observable.fromIterable(contactDaos))
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
可合成。添加(d);
}
@凌驾
public void onNext(ContactDao ContactDao){
Log.e(标签“onNext:+contactDao+firstName”);
}
@凌驾
公共无效申报人(可丢弃的e){
}
@凌驾
未完成的公共空间(){
}
});

我可以从哪里获得flatMapObservable的contactDaos(Observable.fromIterable(contactDaos))我是rxjava中的新成员,因此请帮助您只需要声明变量,我更新了我的答案。您是说当我们添加
Flowable getAllContacts()时它没有返回联系人的完整列表DAO?
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() {

}
});