Android開發中資料傳遞大集合
眾所周知,Android開發中資料傳遞方式多種多樣,根據不同的用途需要選擇不同的傳遞方式。作為剛接觸Android才一年的freshman來說,第一次寫部落格還是有點緊張的,嘿嘿。好咯,言歸正傳,進入正題。
據我目前瞭解,資料傳遞方式有
(1)最基本的使用Intent傳遞
(2)高階一點,使用Bundle傳遞
(3)最後一個厲害的,使用EvenBus,簡直是傳值神器呀
(4)最後再加個資料回傳方式,也是使用Intent的startActivityForResult
好了,接下來一個一個講吧
(1)直接上程式碼吧(傳送端)
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("data","Hello MainActivity!");
startActivity(intent);
這個好理解,將intent看作是一個快遞員,然後讓他帶著“data”這個包裹,包裹裡面放了“Hello MainActivity!”這件物品。快遞員就出發了。。。
又是程式碼(接收端)
Intent intent = getIntent();
String data = intent.getStringExtra("data" );
快遞員到達目的地了,把包裹“data”放到你家門口的儲物櫃了,好巧,儲物櫃的名字也是data。。。
(2)老規矩,先上程式碼(傳送端)
Intent intent= new Intent(MainActivity.this,ImageActivity.class);
Bundle bundle = new Bundle();
bundle.putString("url",file.getFileURL());
intent.putExtras(bundle);
startActivity(intent);
這個也好理解,東西太多了,快遞員也不好運了,把Bundle看作是長途汽車或者是飛機(你的包裹是要出國的節奏呀),照例傳送,嘿嘿
程式碼(接收端)
Bundle bundle = getIntent().getExtras();
url = bundle.getString("url");
經過長途跋涉,快遞終於到你家了。拆開一看,原來也就一個url呀,真是大材小用了。。。
(3)先上程式碼(準備工作)
先定義一個類
public class FirstEvent {
private List<File> mMsg;
public FirstEvent(List<File> msg) {
mMsg = msg;
}
public List<File> getMsg(){
return mMsg;
}
}
上面有兩個方法,第一個是建構函式,另一個就是返回值函數了。
返回資料的型別可以動態變化,我這傳遞的是List型別
接下來是傳送端了
EventBus.getDefault().post(new FirstEvent(data));//使用EvenBus傳送data資料
很簡單有木有哇,就一句話。不過別高興太早,這裡有個jar包需要另外匯入哦,EvenBus。恩,奏是它。下面給個下載連結哈
對了,不知機智的你有木有發現post的引數是剛剛定義的FirstEve類的一個物件呢(開心臉)
好了,忙了半天,終於到了接收端了
EventBus.getDefault().register(this);//註冊EvenBus
首先在活動的onCreate方法中註冊下,下面就好使了
public void onEventMainThread(FirstEvent event) {
list=event.getMsg();
}
@Override
protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
沒錯,就只是這兩個方法,是不是很簡單呀,重點是它能傳各種各樣的數,在活動和類之間,有木有感受到它的強大!
好了,言歸正傳,第一個方法很重要很重要,就是把剛剛傳的引數返回呀,還有我是不會告訴你這裡用到了準備工作裡的getMsg函式的。第二個方法當然就是登出了,有借有還,再借不難。嘻嘻
(4)最後一個啦,資料回傳,感覺敲了好久,廢話有點多哦
Intent intent = new Intent(this, MainActivity.class);
startActivityForResult(intent,1);
借用第一個例子哈,老規矩不變,先說明自己意圖,我SecondActivity要讓快遞員去MainActivity家,而且還要讓他帶點吃的回來,嘻嘻。記住哦,我家暗號是1,快遞員別送錯了呀。
接著,快遞員到了MainActivity
Intent intent = new Intent();
intent.putExtra("data","Hello SecondActivity!");
setResult(1,intent);
MainActivity一看,又是這小子,上回給他帶了那麼多好吃的,結果沒兩天就吃完了,這回不能寵著他了。於是給了快遞員一個名叫“data”的包裹,裡面有張紙條,寫著“Hello SecondActivity!”。。。
對方不想和你說話,給你扔了個Helloworld,哈哈哈
並且告訴快遞員,我的暗號叫1,叫那小子有事找我
於是快遞員就走了,帶著一個包裹
public void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==1){
if(resultCode==1){
String rusultData=data.getDataString("data");
}
}
}
快遞員根據SecondActivity提供的requestCode為1把MainActivity提供的resultCode也是1的包裹放在了SecondActivity家名為rusultData的儲物櫃裡,然後就走了。接下來,就等SecondActivity查看了。。。
預知後事詳情,請看下集,,,