Rxjava2流动不开火onComplete

这是代码

private fun setUpDistrictSpinner() { commonRepo.getAllDistricts() .observeOn(AndroidSchedulers.mainThread()) .flatMap { list -> Flowable.fromIterable(list) } .map { district -> districtNameList.add(district.district_name) district }.subscribe(object:Subscriber<District>{ override fun onComplete() { labSelectionInterface.loadDistricts(districtNameList) Timber.d("district List loaded total " + districtList.size) } override fun onError(t: Throwable?) { t!!.printStackTrace() } override fun onNext(t: District) { districtList.add(t) } override fun onSubscribe(s: Subscription) { s.request(Long.MAX_VALUE) } }) } 

onNext正在开火,但onComplete不会开火。 也没有错误信息。 我正在将一个小区的名单装入一个微调。 使用房间数据库和Kotlin这是我得到Flowable的地方

  fun getAllDistricts(): Flowable<List<District>> { Timber.d("District list accessed") return appDatabase.districtDao().getAllDistricts() .subscribeOn(Schedulers.io()) } 

由房间返回的Flowable永远不会完成。 它允许您在数据库修改时接收更新。

以下是Flowable的行为方式:

  1. 当数据库中没有用户并且查询不返回任何行时,Flowable将不会发出onNext和onError。
  2. 当数据库中有用户时,Flowable将触发onNext。
  3. 每当用户数据更新时,Flowable对象将自动发出,允许您根据最新数据更新UI。

如果你想接收onComplete事件,切换到Maybe 。 你应该阅读这篇文章 。