4

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

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

我还尝试只返回一个项目,该项目仅加载第一个项目,即 db。

4

3 回答 3

12

是的,Flowable<List<Item>>这意味着当列表更改时您将收到一个回调:这就是 Room 的工作方式。通常,您将该列表传递给DiffUtil,然后生成更新您的RecyclerView.

于 2017-06-06T01:23:08.547 回答
4

您可以使用flatMapandFlowable.fromIterable()映射到Flowable哪个将一一发出所有项目

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

    });

而已。简洁干净的代码,无需强制转换toArray

于 2017-10-23T10:23:28.823 回答
3

您可以使用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.

        });
于 2017-06-05T07:58:45.973 回答