首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Android在多个Activity间传递对象及对象数组

Android在多个Activity间传递对象及对象数组

假设对象为People类,包含信息姓名和年龄:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
    }
}




传递对象:
传递端:
?
1
2
3
4
5
6
7
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);



接收端:
?
1
2
3
People people = (People) this.getIntent().getSerializableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();



传递对象数组:
传递端:
?
1
2
3
4
5
6
7
8
9
10
11
12
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);
</people></people>



接收端:
?
1
2
3
4
5
6
7
8
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接口
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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>



传递对象:

传递端:
?
1
2
3
4
5
6
7
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);



接收端:
?
1
2
3
People people = (People) this.getIntent().getParcelableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();



传递对象数组:

传递端:
?
1
2
3
4
5
6
7
8
9
10
11
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);
</people></people>



接收端:
?
1
2
3
4
5
6
7
8
9
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/renqingpi ... /25/Parcelable.html)
1.Serializable的实现,只需要implements  Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
2.Parcelabel的实现,不仅需要implements  Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。
3.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。4.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
5.Parcelable不能使用在要将数据存储在磁盘上的情况,因为在外界有变化的情况下Parcelable不能很好的保证数据的持续性。
继承事业,薪火相传
返回列表