activity间传递数据

1:intent可以传递哪些数据

²       Intent/Bundle支持传递基本类型的数据和基本类型的数组数据

²       String/CharSequence类型的数据和它们的数组数据

²       Parcelable和Serializable类型的数据和它们的数组/列表数据

(在数据类型中实现Parcelable接口或是Serializable接口)

 

2:Parcelable和Serializable区别

²       Serializable是JavaSE本身就支持的,Parcelable是Android特有的。

²       Parcelable性能比Serializable好,在内存开销方面较小,在内存间数据传输时推荐使用Parcelable,如activity间传输数据。

²       Serializable可将数据持久化方便保存,在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。

²       Serializable,只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。

²       Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而Serializable的这些操作完全由底层实现。

²       Parcelable的describeContents方法,内容接口描述,默认返回0就可以;writeToParcel 方法,将类的数据写入外部提供的Parcel中,即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据;createFromParcel方法, 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层;newArray方法,创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。方法是供外部类反序列化本类数组使用。

²       Parcelable写入和读取Parcel容器里的的类型及顺序,必须按成员变量声明的顺序。

²       Parcelable打包的数据可以是基本类型,Parcelable,Serializable。

²       Serializable打包的数据可以是基本类型,不可以是Parcelable。

 

3:Activity之间传递对象,或者通过Bundle传递对象的两种方式

1:Serializable方式
  传递一个对象

2:Parcelable方式
  传递一个对象、传递多个对象(ArrayList<Object>)

方式一:Serializable

     传递类:
    

public class CustomeClass implements Serializable{
	
	private static final long serialVersionUID = -7060210544600464481L;
	private String name;
	private String id;
	private int age;
	private String sex;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}

}


       发送部分: 
       
        CustomeClass cc = new CustomeClass();
        cc.setAge(21);
        cc.setId("123456");
        cc.setName("mingkg21");
        cc.setSex("男");
        
        Intent intent = new Intent(this, PersonInfo.class);
        intent.putExtra("PERSON_INFO", cc);
        startActivity(intent);
       
       接收部分: 
       
         Intent intent = getIntent();
	CustomeClass cc = CustomeClass)intent.getSerializableExtra("PERSON_INFO");
	setTextView(R.id.id, cc.getId());
	setTextView(R.id.name, cc.getName());
	setTextView(R.id.sex, cc.getSex());
	setTextView(R.id.age, String.valueOf(cc.getAge()));




方式二:Parcelable

     传递类:
    

public class CustomeParcelable implements Parcelable {
	
	private String name;
	private String id;
	private int age;
	private String sex;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}	
	public static final Parcelable.Creator<CustomeParcelable> CREATOR = new Creator<CustomeParcelable>(){

		public CustomeParcelable createFromParcel(Parcel source) {
			// TODO Auto-generated method stub
			CustomeParcelable cus = new CustomeParcelable();
			cus.name = source.readString();
			cus.id = source.readString();
			cus.age = source.readInt();
			cus.sex = source.readString();
			return cus;
		}

		public CustomeParcelable[] newArray(int size) {
			// TODO Auto-generated method stub
			return new CustomeParcelable[size];
		}
		
	};

	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}

	public void writeToParcel(Parcel dest, int flags) {
		// TODO Auto-generated method stub
		dest.writeString(name);
		dest.writeString(id);
		dest.writeInt(age);
		dest.writeString(sex);
	}
}


       发送部分: 
       
CustomeParcelable cc = new CustomeParcelable();
cc.setAge(21);
cc.setId("123456");
cc.setName("mingkg21");
cc.setSex("男");
        
Intent intent = new Intent(this, PersonInfo.class);
intent.putExtra("PERSON_INFO", cc);
startActivity(intent);

        接受部分: 
        
Intent intent = getIntent();
CustomeParcelable cc = intent.getParcelableExtra("PERSON_INFO");
setTextView(R.id.id, cc.getId());
setTextView(R.id.name, cc.getName());
setTextView(R.id.sex, cc.getSex());
setTextView(R.id.age, String.valueOf(cc.getAge()));

以上为Parcelable传递一个对象,若要实现传递多个对象, 
传递部分: 
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("mP3TagForNetDTOs",mP3TagForNetDTOs);
msg.setData(bundle);
endDocNotice.sendMessage(msg);

接受部分: 
Bundle bundle =  msg.getData();
mP3TagForNetDTOs = bundle.getParcelableArrayList("mP3TagForNetDTOs");





 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值