为什么用EventBus注册活动是不可能的?

时间:2014-08-07 08:17:54

标签: android events

我正在开发一个使用EventBus向客户提供消息的Android项目。我使用下面的代码行初始化我的总线并注册活动。

bus = new EventBus();
bus.register(this);

我还创建了一个名为onEvent的方法但是我遇到了以下错误:

Subscriber "my_activity" has no methods called onEvent.

许多线程建议使用:

EventBus.getDefault().register(this);

创建一个方法调用onEventMainThread并没有真正帮助。问题是为什么在创建方法onEvent之后,IDE会告诉该方法永远不会被使用。

有人认出这个错误吗?

2 个答案:

答案 0 :(得分:2)

您应该使用:

EventBus.getDefault().register(this);

我不确定为什么这样做没有用,因为你没有发布你的onEvent方法签名。但它可能是你用过的名字。应该是这样的:

public onEvent(EventObject event){...}

您的onEvent方法应该具有名称" onEvent"使用单个参数。基本上,GreenRobot EvenBus的工作方式是查找名为onEvent的方法,该方法采用正在发送的事件的参数类型。

因此,例如,如果要发送对象类型FooEvent,请执行此操作。

  1. 定义一个名为FooEvent
  2. 的简单公共pojo类
  3. 在接收类上创建一个方法,例如:

    
    public void onEvent(FooEvent event){
       // handle event
    }
    
  4. 注册接收课程;

    
    EventBus.getDefault().register(this);
    
  5. 发送您的活动:

    
    EventBus.getDefault().post(new FooEvent());
    
    希望有所帮助。如果没有,请发布您的onEvent方法签名。如果可以,我会帮忙。祝你好运。

答案 1 :(得分:-1)

感谢@startoftext的回答。 我尝试过但不是很有帮助。我终于切换到OTTO,其方法与EventBus相同(注册一个对象,在总线上发布...)。

Bus bus = new Bus();
bus.register(context);
bus.post(new MyObject(xxx));

所以EventBus的区别在于事件方法。添加@Subscribe(如下所述)。

@Subscribe 
public void onAnswerEvent (MyObject mObject) {
    //do something
}