EventBus用法详解与常见异常

EventBus使用起来十分简单,大体为已下几步:
(1)自定义一个类,可以是空类,如下。当然可以是空类,一般不会,应用中总要传点什么数据吧,是吧。

public class EventUtil {
    private String msg;  

    public EventUtil(String msg) {  
        this.msg = msg;
    }

    public String getMsg(){
        return this.msg;  
    }  
}

(2)在要接收消息的页面注册:Fragment和Activity在OnCreate()方法中。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test1);

        EventBus.getDefault().register(this);  //注册  
    }

(3)在要接收消息的页面注册解除注册:Fragment和Activity在onDestroy()方法中。

@Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);//取消注册
    }

(4)在接受消息的页面实现四个接收函数中的任意一个,可多选。

// 接收函数一
    public  void onEvent(EventUtil event){
        String msglog = "----onEvent收到了消息:"+event.getMsg();
        Log.d("hml",msglog); 
        bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
    }
    // 接收函数二
    public void onEventBackgroundThread(EventUtil event){
        String msglog = "----onEventBackground收到了消息:"+event.getMsg();
        Log.d("hml",msglog); 
        bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
    }
    // 接收函数三
    public void onEventAsync(EventUtil event){
        String msglog = "----onEventAsync收到了消息:"+event.getMsg();
        Log.d("hml",msglog); 
        bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
    }
    // 接收函数四
    public  void onEventMainThread(EventUtil event) {
        String msglog = "----onEventMainThread收到了消息:"+event.getMsg();
        Log.d("hml",msglog); 
        bt1_activity1.setText(bt1_activity1.getText().toString()+"\n"+msglog);
    }

(5)在发送消息的页面,调用发送消息代码。一般在点击事件中

bt1_activity2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(new EventUtil("activity2发送消息"));
            }
        });

异常 EventBusException:its super classes have no public methods with the @Subscribe annotation

把jar包,代码复制到Android Studio里面
EventBus.getDefault().register(this);报错了。
我也是奇了怪了,第一行就报错了,也就是标题的上面的那个异常。

这里的解决办法是:
这里只要在 onEventMainThread 这个回调 方法上加上 @Subscribe 注解就可以了。

你可能感兴趣的:(技术总结)