【问题标题】:Kotlin RxJava2 Flowable PublishSubject doesn't emit data onNextKotlin RxJava2 Flowable PublishSubject 不发出数据 onNext
【发布时间】: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(),看看是否是这种情况。

标签: kotlin rx-java2


【解决方案1】:

这是我的错。只需使用 BehaviorSubject 代替 PublishSubject。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多