【发布时间】:2018-05-11 08:05:16
【问题描述】:
我知道在 stackoverflow 上我们有很多类似的问题,但我真的不知道我做错了什么。
我有列表对象。
val applicationList: MutableList<Application> = generateApplications()
在我创建 PublishSubject 和 Flowable 之后
val applicationsPublishSubject = PublishSubject.create<List<Application>>()
val applicationsFlowable = applicationsPublishSubject.toFlowable(BackpressureStrategy.LATEST)
// The second variant
// applicationsFlowable = Flowable.fromPublisher<List<Application>> { applicationsPublishSubject }
在我生成应用程序并调用之后
applicationsPublishSubject.onNext(applicationList);
这是我的 getFlowable 方法:
override fun getApplications(): Flowable<List<Application>> {
return applicationsFlowable
}
这就是我订阅我的 flowable 的方式:
compositeDisposable.add(dataSource.getApplications()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
getViewState().setApplicationList(it)
}, {
Log.e("ApplicationsPresenter", it.toString())
}))
但是 onNext 方法从不调用。 如果我使用此代码,它会完美运行。
override fun getApplications(): Flowable<List<Application>> {
return Flowable.just(applicationList)
}
但这并不是我想要的。因为当我将创建新的 Application 对象时,我想向我的 applicationsFlowable 发出新列表。
override fun createApplication(name: String): Single<Application> {
val application = generateApplication(name)
applicationsPublishSubject.onNext(applicationList)
return Single.just(application)
}
我做错了什么??
【问题讨论】:
-
您可能比流的订阅者更早发送事件。请在致电
onNext之前检查applicationsPublishSubject.hasObservers(),看看是否是这种情况。