Android在多个Activity间传递对象及对象数组
假设对象为People类,包含信息姓名和年龄:
public class People{ public String strName; public int iAge; public People(String strName,int iAge){ this.strName = strName; this.iAge = iAge; } public String getName(){ return strName; } public int getAge(){ return iAge; } }
方法一:Serializable
必须条件:类实现了Serializable接口
public class People implements Serializable{ private static final long serialVersionUID = 1L; public String strName; public int iAge; public People(String strName,int iAge){ this.strName = strName; this.iAge = iAge; } public String getName(){ return strName; } public int getAge(){ return iAge; } }
传递对象:
传递端:
People people = new People("John", 21); Intent intent = new Intent(SendActivity.this,RcvActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("people", people); intent.putExtras(bundle); startActivity(intent);
接收端:
People people = (People) this.getIntent().getSerializableExtra("people"); String strData = people.getName() + " " + people.getAge(); Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<People> people = new ArrayList<People>(); people.add(new People("John", 21)); people.add(new People("Amy", 20)); Bundle bundle = new Bundle(); bundle.putSerializable("people", (Serializable) people); Intent intent = new Intent(SendActivity.this, RcvActivity.class); intent.putExtras(bundle); startActivity(intent);
接收端:
List<People> resultList = (List<People>) this.getIntent().getSerializableExtra("people"); String strData = ""; for (People p : resultList) { strData = strData + p.strName + " " + p.iAge + "\n"; } Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
方法二:Parcelable
必须条件:类实现了Parcelable接口
public class People implements Parcelable { public String strName; public int iAge; public People(String strName,int iAge){ this.strName = strName; this.iAge = iAge; } public String getName(){ return strName; } public int getAge(){ return iAge; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel parcel, int arg1) { // TODO Auto-generated method stub parcel.writeString(strName); parcel.writeInt(iAge); } public static final Parcelable.Creator<People> CREATOR = new Creator<People>() { public People createFromParcel(Parcel source) { People pTemp = new People("",0); pTemp.strName = source.readString(); pTemp.iAge = source.readInt(); return pTemp; } public People[] newArray(int size) { return new People[size]; } }; }
传递对象:
传递端:People people = new People("John", 21); Intent intent = new Intent(SendActivity.this,RcvActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable("people", people); intent.putExtras(bundle); startActivity(intent);
接收端:
People people = (People) this.getIntent().getParcelableExtra("people"); String strData = people.getName() + " " + people.getAge(); Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<People> People = new ArrayList<People>(); People.add(new People("John", 21)); People.add(new People("Amy", 20)); Intent intent = new Intent(SendActivity.this,RcvActivity.class); Bundle bundle = new Bundle(); bundle.putParcelableArrayList("People", (ArrayList<? extends Parcelable>) People); intent.putExtras(bundle); startActivity(intent);
接收端:
List<People> resultList = this.getIntent().getExtras() .getParcelableArrayList("People"); String strData = ""; for (People p : resultList) { strData = strData + p.strName + " " + p.iAge + "\n"; } Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
可以发现在Parcelable中需实现public int describeContents()、 publicvoid writeToParcel(Parcel parcel, int arg1),还需要在添加一个静态成员变量CREATOR:public static final Parcelable.Creator<People> CREATOR。
区别(by: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html)
1.Serializable的实现,只需要implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
2.Parcelabel的实现,不仅需要implements Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。
3.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。4.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
5.Parcelable不能使用在要将数据存储在磁盘上的情况,因为在外界有变化的情况下Parcelable不能很好的保证数据的持续性。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。