Rxjava2可流动而不是onComplete

时间:2017-10-03 09:30:42

标签: android rx-java2 android-room

这是代码

    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不会触发。也没有错误消息。我正在将区域列表加载到微调器中。使用Room数据库和Kotlin 这是我获得Flowable的地方

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

}

1 个答案:

答案 0 :(得分:12)

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

  

以下是Flowable的行为:

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

如果您想收到onComplete个活动,请切换到Maybe。你应该阅读article