我有一个 Room ORM 中的项目列表,我想在 Recycler 视图中显示。数据正在从网络添加到数据库。问题是每次从Flowable而不是每个项目发出整个列表时我都会得到。我试过 .distinctUntilChanged 没有区别。
@Query("SELECT * FROM items")
Flowable<List<Item>> getItems();
我还尝试只返回一个项目,该项目仅加载第一个项目,即 db。
我有一个 Room ORM 中的项目列表,我想在 Recycler 视图中显示。数据正在从网络添加到数据库。问题是每次从Flowable而不是每个项目发出整个列表时我都会得到。我试过 .distinctUntilChanged 没有区别。
@Query("SELECT * FROM items")
Flowable<List<Item>> getItems();
我还尝试只返回一个项目,该项目仅加载第一个项目,即 db。
是的,Flowable<List<Item>>
这意味着当列表更改时您将收到一个回调:这就是 Room 的工作方式。通常,您将该列表传递给DiffUtil
,然后生成更新您的RecyclerView
.
您可以使用flatMap
andFlowable.fromIterable()
映射到Flowable
哪个将一一发出所有项目
getItems()
.flatMap(Flowable::fromIterable)
.subscribe(item -> {
});
而已。简洁干净的代码,无需强制转换toArray
您可以使用flatMap
获取项目流。
itemDao.getItems().flatMap(list -> {
Item[] items = new Item[list.size()];
list.toArray(items);
return Flowable.fromArray(items);
}).subscribe(item -> {
// Now you can do with each item.
});
如果您只需要第一项:
itemDao.getItems().flatMap(list -> {
Item[] items = new Item[list.size()];
list.toArray(items);
return Flowable.fromArray(items);
})
.firstElement()
.subscribe(first -> {
// Now you can do with the first one.
});