【问题标题】:RxJava PublishProcessor does not receive onNextRxJava PublishProcessor 没有收到 onNext
【发布时间】:2018-04-12 17:23:02
【问题描述】:

我是 RxJava 的新手,并尝试在 Android 中构建模型视图意图模式。在我的视图(活动)中,我创建了一个 PublishProcessor,如下所示:

private PublishProcessor<MviResultIntent> mPublishProcessor;
mPublishProcessor = PublishProcessor.create();

创建后,我将使用处理器作为参数调用演示者的方法:

mResultPresenter.bindIntents(mPublishProcessor);

被调用方法内部发生了什么:

        Disposable processIntents = mPublishProcessor 
            .subscribeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSubscriber<MviResultIntent>() {

                @Override
                public void onNext(MviResultIntent mviResultIntent) {
                }

                @Override
                public void onError(Throwable e) {
                }

                @Override
                public void onComplete() {
                    //may be ignored
                }
            });

    mCompositeDisposable.add(processIntents);

然后在我的 View Class 中调用:

mPublishProcessor.onNext(new MviResultIntent.ProductsIntent());

我的 Presenter 中的 PublishProcessor 没有得到我试图触发的 onNext 事件。我错过了什么吗?我也没有收到 onComplete 或 onError 。

感谢任何帮助!如果您需要任何进一步的信息,请随时询问。提前感谢您的帮助!

【问题讨论】:

  • onNext 之前检查mPublishProcessor.hasSubscribers() 以确认确实有订阅者在收听时间。
  • 正如你所料,当我调用 onNext 时没有订阅者,但到目前为止我还没有解决方案。
  • 你必须在事件触发之前调用subscribeWith
  • 是的,这就是我正在做的事情,或者至少我相信我会做。我在 onCreate 中调用 PublishProcessor 和 bindIntents 方法的创建,在 onResume 中调用 onNext。
  • 我有另一个类似的结构,它实际上可以工作。但是 hasSubscribers 也在那里返回 false 。如果这可能是一个提示,我在 2.1.10 版上

标签: android rx-java rx-java2


【解决方案1】:

我发现我无法在主线程上的非 Android 类中订阅。当我改变

.subscribeOn(AndroidSchedulers.mainThread())

.subscribeOn(Schedulers.io())

它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多