未收到Greenrobot EventBus活动

时间:2015-01-09 09:36:35

标签: android greenrobot-eventbus

我使用Greenrobot EventBus将事件从一个活动传递到另一个活动。

流程是这样的: Activity1开始 - >扫描条形码 - > Activity2开始 - >接受或拒绝回复并向活动1发送事件。

因此,Activity2通过执行以下操作向Activity1发送新事件:

@Override
public void onCreate(){
  EventBus.getDefault().register(this);
  // other initialization code
  EventBus.getDefault().post(new MyEvent());
}

在Activity1中,我注册了事件总线,并且我还有公共的onEvent(MyEvent myEvent)方法来接收事件。

问题是onEvent未被触发。我看到可能在事件总线对象上存在问题(如活动1和2中的不同实例或某些实例),但它是相同的实例。

我不知道什么似乎是问题。如果有人可以看看并告诉我我做错了什么,我会非常感激。

谢谢!

4 个答案:

答案 0 :(得分:7)

在这种情况下,您可能需要使用粘性事件。在Activity1启动Activity2之后,它会进入后台,并且无法再接收任何事件。

将它放在Activity1而不是EventBus.getDefault()。register(Object Event)

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().registerSticky(this);
}

并替换

EventBus.getDefault().post(new MyEvent());
使用

在Activity2中

EventBus.getDefault().postSticky(new MyEvent());

Here is a link to the documentation explaining it

答案 1 :(得分:3)

您的Activity1 EventBus取消注册如何?

由于我这样做,我遇到了同样的问题:

Activity1.java

@Override
protected void onStop() {
     super.onStop()
     EventBus.getDefault().unregister(this);
}

问题在于,当您启动Activity2 onStop获取调用时,因此删除对该事件的订阅。我能够通过将取消注册移动到onDestroy来解决这个问题:

Activity1.java

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

答案 2 :(得分:0)

班级考试

public class TestEventBus {

private String label;

public String getLabel() {
    return label;
}

public void setLabel(String label) {
    this.label = label;
}
}

活动A

TestEventBus t = new TestEventBus();
t.setLabel("oi");
EventBus.getDefault().post( t );

活动B

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(TestEventBus test) {

Toast.makeText(this, "label "+test.getLabel(), 
Toast.LENGTH_SHORT).show();

};

@Override
public void onStart() {
  super.onStart();
  EventBus.getDefault().register(this);
}

@Override
public void onStop() {
  super.onStop();
  EventBus.getDefault().unregister(this);

 }

答案 3 :(得分:0)

在要接收粘性事件的新版本中,设置 methods: { async storeStaticContent() { // This is where I fetch the content and write it away in the store. const response = await fetch(`/static/content.json`); const json = await response.json(); this.$store.commit(MUTATIONS.SET_CONTENT, json); this.addRoute(); }, addRoute: function() { this.$router.addRoutes( [{ path: `/${store.getters.mainEntity}`, name: store.getters.mainEntity, component: EntityPage, }] ); } }, 标志sticky

true