前言:因为用到了第三方SDK,想用Bundle传递数据,发现里面的类没有序列化根本不行啊,所以就用了EventBus来传递数据,在此记录一下吧。
一:添加依赖
首先我们需要在主项目的build.gradle里面添加依赖:我们就用3.0的EventBus吧。
依赖如下:
compile 'de.greenrobot:eventbus:3.0.0-beta1'
二:我们创建两个Activity,分别为MainActiivty和SecondActivity,我们在MainActiivty里面发送数据,然后在SecondActivity里面接收数据。
(1):我们先创建一个MessageEvent的类来模拟数据:
public class MessageEvent {
public String name;
public MessageEvent(String aName) {
this.name = aName;
}
}
(2)在MainActivity里面传递数据:
就传递一个字符串Hello好了
findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
EventBus.getDefault().post(new MessageEvent("Hello"));
}
});
(3):在SecondActivity里面接收数据:
1,首先我们先注册一下:
EventBus.getDefault().register(this);
2,然后页面销毁时在onDestroy里面解注册:
EventBus.getDefault().unregister(this);
3,然后再来接收数据:
@Subscribe(threadMode = ThreadMode.MainThread)
public void onEventMainThread(MessageEvent messageEvent) {
Log.e(TAG, "messageEvent~~~" + messageEvent.name);
Toast.makeText(this, messageEvent.name, Toast.LENGTH_SHORT).show();
}
一定不要忘了subscrip描述。
运行一下,点击发现并没有收到Toast吐司啊,什么情况?
我们来修改一下代码:
首先在MainActivity里面我们用postSticky来代替post发送。
findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
EventBus.getDefault().postSticky(new MessageEvent("Hello"));
}
});
在其次我们在subscribe里面加上sticky = true.
@Subscribe(threadMode = ThreadMode.MainThread,sticky = true)
public void onEventMainThread(MessageEvent messageEvent) {
Log.e(TAG, "messageEvent~~~" + messageEvent.name);
Toast.makeText(this, messageEvent.name, Toast.LENGTH_SHORT).show();
}
在运行一下发现没问题了。
具体问题出在哪里还没有弄明白,有知道的小伙伴告知一下啦。
网友评论