您的位置:首页 > 移动开发 > Android开发

Android Activity之间传递对象及对象数组

2015-10-26 23:19 405 查看
假设对象为People类,包含信息姓名和年龄:

publicclass People{

publicString strName;

publicint iAge;

publicPeople(String strName,intiAge){

this.strName = strName;

this.iAge = iAge;

}

publicString getName(){

returnstrName;

}

publicint getAge(){

returniAge;

}

}

方法一:Serializable

必须条件:类实现了Serializable接口

publicclass People implementsSerializable{

privatestatic final long serialVersionUID = 1L;

publicString strName;

publicint iAge;

publicPeople(String strName,intiAge){

this.strName = strName;

this.iAge = iAge;

}

publicString getName(){

returnstrName;

}

publicint getAge(){

returniAge;

}

}

传递对象:

传递端:

People people = newPeople("John",21);

Intent intent = newIntent(SendActivity.this,RcvActivity.class);

Bundle bundle = newBundle();

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 = newArrayList<people>();

people.add(newPeople("John",21));

people.add(newPeople("Amy",20));

Bundle bundle = newBundle();

bundle.putSerializable("people", (Serializable) people);

Intent intent = newIntent(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();

</people></people>

方法二:Parcelable

必须条件:类实现了Parcelable接口

publicclass People implementsParcelable {

publicString strName;

publicint iAge;

publicPeople(String strName,intiAge){

this.strName = strName;

this.iAge = iAge;

}

publicString getName(){

returnstrName;

}

publicint getAge(){

returniAge;

}

@Override

publicint describeContents() {

// TODO Auto-generated method stub

return0;

}

@Override

publicvoid writeToParcel(Parcel parcel, intarg1) {

// TODO Auto-generated method stub

parcel.writeString(strName);

parcel.writeInt(iAge);

}

publicstatic final Parcelable.Creator<people> CREATOR = newCreator<people>() {

publicPeople createFromParcel(Parcel source) {

People pTemp = newPeople("",0);

pTemp.strName = source.readString();

pTemp.iAge = source.readInt();

returnpTemp;

}

publicPeople[] newArray(intsize) {

returnnew People[size];

}

};

}

传递对象:

传递端:

People people = newPeople("John",21);

Intent intent = newIntent(SendActivity.this,RcvActivity.class);

Bundle bundle = newBundle();

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 = newArrayList<people>();

People.add(newPeople("John",21));

People.add(newPeople("Amy",20));

Intent intent = newIntent(SendActivity.this,RcvActivity.class);

Bundle bundle = newBundle();

bundle.putParcelableArrayList("People", (ArrayList<!--? extendsParcelable-->) People);

intent.putExtras(bundle);

startActivity(intent);

</people></people>

接收端:

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();

</people>

可以发现在Parcelable中需实现public int describeContents()、 publicvoid writeToParcel(Parcel parcel, int arg1),还需要在添加一个静态成员变量CREATOR:public static final Parcelable.Creator 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不能很好的保证数据的持续性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: