android - 用rxjava一一迭代列表android房间
问题描述
我有从房间 db 获取的列表,我想用 rxjava 逐一获取该列表项。当我添加消费者和流动时,它只给出第一个索引,所以将它添加到单个索引中。它对我有用,但我想知道这是获取或不获取的正确方法,请告诉我。
@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();
}
});
解决方案
无需在观察者的回调中创建新链,您可以将调用与迭代链接到数据库并拥有一条链:
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() {
}
});
推荐阅读
- java - Apache Camel:如何迭代列表并调用rest api?
- python - 在具有多个 python 版本的 Ubuntu 18.04 中卸载所有 Python 包
- python - Python BigQuery:插入内容为数字的字符串失败
- c - C 如何正确存储 sqlite3 行数据?
- ubuntu-16.04 - Ejabberd 19 在安装时抛出“deps/.got”异常
- javascript - 如何提交从php生成的多个表单
- automated-tests - 如何在 Visual Studio 2019 中单独运行选定的测试
- yammer - 通过 Yammer 上的 API 发布富文本消息
- wordpress - plesk 子文件夹/blog wordpress nginx 404 未找到
- sql-server - 在同一台计算机上从 SQL Server Express 切换到 SQL Server Developer 版本