在标题中我正在尝试创建事件总线以共享片段之间的多个事件。我正在使用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的新手,我无法解决我的问题,所以我会感激任何建议。