前言:因為用到了第三方SDK役首,想用Bundle傳遞數(shù)據(jù)尝丐,發(fā)現(xiàn)里面的類沒有序列化根本不行啊,所以就用了EventBus來傳遞數(shù)據(jù)衡奥,在此記錄一下吧爹袁。
一:添加依賴
首先我們需要在主項目的build.gradle里面添加依賴:我們就用3.0的EventBus吧。
依賴如下:
compile 'de.greenrobot:eventbus:3.0.0-beta1'
二:我們創(chuàng)建兩個Activity矮固,分別為MainActiivty和SecondActivity失息,我們在MainActiivty里面發(fā)送數(shù)據(jù),然后在SecondActivity里面接收數(shù)據(jù)档址。
(1):我們先創(chuàng)建一個MessageEvent的類來模擬數(shù)據(jù):
public class MessageEvent {
public String name;
public MessageEvent(String aName) {
this.name = aName;
}
}
(2)在MainActivity里面?zhèn)鬟f數(shù)據(jù):
就傳遞一個字符串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里面接收數(shù)據(jù):
1盹兢,首先我們先注冊一下:
EventBus.getDefault().register(this);
2,然后頁面銷毀時在onDestroy里面解注冊:
EventBus.getDefault().unregister(this);
3守伸,然后再來接收數(shù)據(jù):
@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描述绎秒。
運行一下,點擊發(fā)現(xiàn)并沒有收到Toast吐司啊尼摹,什么情況见芹?
我們來修改一下代碼:
首先在MainActivity里面我們用postSticky來代替post發(fā)送。
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();
}
在運行一下發(fā)現(xiàn)沒問題了蠢涝。
具體問題出在哪里還沒有弄明白玄呛,有知道的小伙伴告知一下啦。