这是代码
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())
}
答案 0 :(得分:12)
Room返回的Flowable
永远不会完成。它允许您在数据库修改时接收更新。
以下是Flowable的行为:
- 当数据库中没有用户并且查询没有返回任何行时,Flowable将不会发出onNext和onError。
- 当数据库中有用户时,Flowable将触发onNext。
- 每次更新用户数据时,Flowable对象都会自动发出,允许您根据最新数据更新UI。
醇>
如果您想收到onComplete
个活动,请切换到Maybe
。你应该阅读article。