众所周知,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查看了。。。
预知后事详情,请看下集,,,