android不同activity之间传送数据值得方法

在上一章创建两个activity的基础上,这章我们简单介绍一下不同activity之间传递数据的方法(有其他方法日后学到继续补充)

一、在activity传递简单的数据

   在activity之间传递简单数据如int,string类型的数据一般采用基于消息的通信机制intent,在上一章中我们知道intend可以用来启动另外一个activity,不仅如此intend还可以用来传递数据

intent包含两个部分:

1、目的地:要到哪里去

2、携带的内容:及传递的数据

程序传递的过程如下所示:

Intent i = new Intent(MainActivity.this,Bactivity.class);首先申明一个intent,其中MainActivity.this是源,Bactivity.class是目的地

i.putExtra("junson", "Hello,I am A activity");然后将数据传入intent对象中,junson是用来区分数据的,"Hello,I am A activity"是传递的内容

startActivity(i);然后将数据发送过去

在接受的Bactivity中,采用如下方法接收数据:

Intent i = getIntent();申明一个intent对象,获取发送过来的intend消息

Btv = (TextView)findViewById(R.id.Btext);找一个textview用来显示接收到的消息

Btv.setText(i.getStringExtra("junson"));显示junson消息

这种方式只能传递简单的数据类型:


根据需要传递的数据类型进行选择和区分。

二、在activity之间传递复杂数据

    传递复杂数据我们可以利用android.os.Bundle对象封装数据的能力来传递数据包,通过Bundle来传递不同intent之间的数据,Bundle对象针对不同的数据类型提供了许多的方法,例如传递string类型等。

实现过程如下:

Intent i = new Intent(MainActivity.this,Bactivity.class);

Bundle Bd= new Bundle();申明一个bundle对象

Bd.putString("junson", "hello,i am not a activity");填充数据1

Bd.putInt("xiaolian", 25);填充数据2

i.putExtras(Bd);把数据发送出去

startActivity(i);

在接受数据的activity中

Btv = (TextView)findViewById(R.id.Btext);

Intent i = getIntent();

Bundle data = i.getExtras();//接受传递过来的消息

Btv.setText(String.format("what:%s,xiaolian:%d", data.getString("junson"),data.getInt("xiaolian")));//现实传递过来的消息

三、在activity之间传递自定义的值对象

   如果你想在activity之间传递自定义的数据类型我们可以利用java包中提供的Serializable方法或者android os提供的Parcelable方法:

首先我们创建一个我们需要传递的数据类型

public class UserData{
private String name;
private int age;
public UserData(String name,int age){
this.name = name;
this.age = age;
}
public void setname(String name){
this.name = name;
}
public String getname(){
return this.name;
}
public void setage(int age){
this.age = age;
}
public int getage(){
return this.age;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}

如上所示,我们定义了一个UserData自定义的数据类型,里面包含了一个string类型的name数据和一个int类型的age数据


1、使用java的Serializable方法的程序如下所示:

Intent i = new Intent(MainActivity.this,Bactivity.class);

i.putExtra("junson", new  UserData("junson",25));//使用匿名内部类发送数据

在接收端

UserData data = (UserData) i.getParcelableExtra("junson");

Btv.setText(String.format("User info(name=%s,age=%d)", data.getname(),data.getage()));

使用使用java的Serializable方法需要将自定义的数据类型的申明改成

public class UserData implements Serializable即可

2、使用android os提供的Parcelable方法

使用Parcelable方法需要将自定义数据类型的申明改成

public class UserData implements Parcelable{
private String name;
private int age;
public UserData(String name,int age){
this.name = name;
this.age = age;
}
public void setname(String name){
this.name = name;
}
public String getname(){
return this.name;
}
public void setage(int age){
this.age = age;
}
public int getage(){
return this.age;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(getname());
dest.writeInt(getage());
}

public static final Creator<UserData> CREATOR = new Creator<UserData>() {
public UserData createFromParcel(Parcel source){
return new UserData(source.readString(),source.readInt());
}

public UserData[] newArray(int Size){
return new UserData[Size];
}
};
}

并完成writeToParcel和public static final Creator<UserData> CREATOR = new Creator<UserData>() 的接口

其他方法一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值