从Flowable Room ORM发出每件物品

时间:2017-06-04 20:54:34

标签: android rx-java2 android-room

我在Room ORM中有一个项目列表,我希望在Recycler视图中显示这些项目。数据正从网络添加到数据库。问题是每次整个列表从Flowable而不是每个项目发出时我都会得到。我尝试过.distinctUntilChanged并没有区别。

@Query("SELECT * FROM items")
Flowable<List<Item>> getItems();

我还尝试过只返回一个只加载第一个db的项目。

3 个答案:

答案 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)

您可以使用flatMapFlowable.fromIterable()映射到Flowable,这将逐个发出所有项目

getItems()
    .flatMap(Flowable::fromIterable)
    .subscribe(item -> {

    });

就是这样。简短而干净的代码,无需转换toArray