【问题标题】:How to organize request from ROOM DB which Flowable<List> and could work with toList()?如何组织来自 ROOM DB 的 Flowable<List> 并可以与 toList() 一起使用的请求?
【发布时间】:2017-11-01 12:14:09
【问题描述】:
 fun loadItems(id: Int): Flowable<List<Item>> {
return dao.loadItems(id).toFlowable()}

因为dao.loadItems() 返回Single,所以它有效,但是 我想要 Flowable (监听数据库更改)并且必须 toList() 我的旧代码 dao.loadItems() 返回 Single

 val items = shoppingListsRepository.loadItems(shoppingListId)
    .flatMapIterable { shoppingListItem -> shoppingListItem }
    .flatMap { shoppingListItem ->
      loadOfferForShoppingListItem(shoppingListItem.offerId)
          .map { offer ->
            Pair(shoppingListItem, offer)
          }
          .map { it -> shoppingListWithOffer(it.first, it.second) }
          .subscribeOn(Schedulers.computation())
    }.toList()
    .toFlowable()

这是我的新代码,它可以工作,但是当我将 loadItems() 的返回类型更改为 Flowable 时它不起作用?我做错了吗?

  val items = shoppingListsRepository.loadShoppingListItems(shoppingListId)
    .flatMap { it ->Flowable.fromIterable(it)}
    .flatMap { shoppingListItem ->
      loadOfferForShoppingListItem(shoppingListItem.offerId)
          .map { offer -> Pair(shoppingListItem, offer) }
          .map { it -> shoppingListWithOffer(it.first, it.second) }
    }.toList()
    .toFlowable()

【问题讨论】:

    标签: android rx-java2 android-room


    【解决方案1】:

    您需要在 flatMap 中创建您的流。这样您将获得更新:

    repository.loadItems(id)
       .flatMap { 
           Flowable.fromIterrable(it)
           ... (do your thing here)
           .toList()
    }
    

    【讨论】:

    • @mismzniac 你能看看我的代码吗?
    • 等等..你为什么只改变房间的输出:loadShoppingListItems 为可流动的?它应该在每次表更改时发出列表。尝试不使用 flatMapIterable,以确保 Room 正确发射,然后按照我之前提到的方式添加 flatMap。您不能在 flowable 的无限排放中使用 toList()。
    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2021-04-29
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多