android,rxjava中的PublishSubject没有调用onNext?

Posted

技术标签:

【中文标题】android,rxjava中的PublishSubject没有调用onNext?【英文标题】:onNext not called for PublishSubject in android, rxjava? 【发布时间】: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);

【问题讨论】:

【参考方案1】:

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

【讨论】:

非常感谢,就是这样。 很高兴为您提供帮助

以上是关于android,rxjava中的PublishSubject没有调用onNext?的主要内容,如果未能解决你的问题,请参考以下文章

android,rxjava中的PublishSubject没有调用onNext?

何时在 Android 中使用 RxJava,何时使用 Android 架构组件中的 LiveData?

java 使用RxJava管理Android中的订阅

RxJava 作为 Android 项目中的事件总线 - 从总线中删除事件

在Android上调试时RxJava缓存线程中的InterruptedException

“再见RxJava,你好Flow”,Android线程切换哪家最强?