在javaRx 2.0中创建事件总线

时间:2018-06-18 14:05:09

标签: android rx-android

在标题中我正在尝试创建事件总线以共享片段之间的多个事件。我正在使用JavaRx 2和Dagger 2进行注射。这就是我想要实现的目标: documentation

这就是我的活动巴士的样子:

    @MainScope
public class EventBus {

    @Inject
    public EventBus(){

    }

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

    public <T> Observable<T> register (Class<T> eventClass){

        return busSubject
                .filter(event -> event.getClass().equals(eventClass))
                .map(obj -> (T) obj);
    }


    public PublishSubject<Object> getBusSubject() {
        return busSubject;
    }

    public void post(Object event){
        busSubject.onNext(event);
    }
}

然后在mainPresenter中我发布了这样的简单类:

eventBus.post(id);

并在其中一个片段中我注入了相同的事件总线实例我订阅了事件:

Observer<IdEvent> observer = eventBus.register(IdEvent.class).observeOn(schedulersFacade.io()).subscribeOn(schedulersFacade.ui()).subscribeWith(new Observer<IdEvent>() {
            @Override
            public void onSubscribe(Disposable d) {
                System.out.println( );
            }

            @Override
            public void onNext(IdEvent idEvent) {
                id = idEvent.getParsedId();
            }

            @Override
            public void onError(Throwable e) {
                System.out.println( );
            }

            @Override
            public void onComplete() {
                System.out.println( );
            }
        });

在调试中,我看到调用post方法,以及onSubscribe观察者方法。问题是永远不会调用onNext方法。我是JavaRx的新手,我无法解决我的问题,所以我会感激任何建议。

0 个答案:

没有答案