众所周知,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。恩,奏是它。下面给个下载链接哈

链接:http://pan.baidu.com/s/1bpElYKf 密码:1qw8

对了,不知机智的你有木有发现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查看了。。。

预知后事详情,请看下集,,,