我在Room ORM中有一个项目列表,我希望在Recycler视图中显示这些项目。数据正从网络添加到数据库。问题是每次整个列表从Flowable而不是每个项目发出时我都会得到。我尝试过.distinctUntilChanged并没有区别。
@Query("SELECT * FROM items")
Flowable<List<Item>> getItems();
我还尝试过只返回一个只加载第一个db的项目。
答案 0 :(得分:8)
是的,Flowable<List<Item>>
表示您在列表更改时会收到一个回调:这就是Room的工作方式。通常,您会将该列表传递到DiffUtil
,然后会生成更新RecyclerView
所需的一组更改。
答案 1 :(得分:2)
您可以使用this
获取商品流。
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.
});
答案 2 :(得分:2)
您可以使用flatMap
和Flowable.fromIterable()
映射到Flowable
,这将逐个发出所有项目
getItems()
.flatMap(Flowable::fromIterable)
.subscribe(item -> {
});
就是这样。简短而干净的代码,无需转换toArray