1. 程式人生 > >Android開發中資料傳遞大集合

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查看了。。。

預知後事詳情,請看下集,,,