【问题标题】:onNext not called for PublishSubject in android, rxjava?android,rxjava中的PublishSubject没有调用onNext?
【发布时间】:2018-05-07 08:47:43
【问题描述】:

我正在使用 rxjava 2 并尝试使用 rxbus 来传递值

rxbus 代码

public class SeasonTabSelectorBus {
private static SeasonTabSelectorBus instance;

private PublishSubject<Object> subject = PublishSubject.create();

public static SeasonTabSelectorBus instanceOf() {
    if (instance == null) {
        instance = new SeasonTabSelectorBus();
    }
    return instance;
}

public void setTab(Object object) {
    try {
        subject.onNext(object);
        subject.onComplete();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public Observable<Object> getSelectedTab() {
    return subject;
}

}

我将值设置为

 SeasonTabSelectorBus.instanceOf().setTab(20);

这是我的订阅代码

SeasonTabSelectorBus.instanceOf().getSelectedTab().subscribe(new Observer<Object>(){
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Object o) {
            if (o instanceof Integer) {
                int seasonSelected =(int) o;
                Log.e("season selected",seasonSelected+"");
            }
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });

现在我在第一次调用时得到了值,但是当我用不同的值再次调用时,我没有得到回调。

 SeasonTabSelectorBus.instanceOf().setTab(40);
 SeasonTabSelectorBus.instanceOf().setTab(90);
 SeasonTabSelectorBus.instanceOf().setTab(120);
 SeasonTabSelectorBus.instanceOf().setTab(290);

【问题讨论】:

    标签: android rx-java2 rx-android publishsubject


    【解决方案1】:

    您只收到第一个,因为在发布 (subject.onNext(object)) 之后,您正在调用 subject.onComplete()。只需删除该行。

    【讨论】:

    • 非常感谢,就是这样。
    • 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多