您的位置:首页 > 其它

Intent传递对象的两种方法

2015-10-27 11:55 309 查看
android为Intent提供了两种传递对象参数类型的方法

分别需要使实体类实现Serializable接口、Parcelable接口

首先,我们需要知道,传递对象首先要将对象序列化。

一、那么为什么要对象序列化呢?

1、永久性保存对象。保存对象的字节序列到本地文件中。

2、用序列化对象在网络中,进程间传递对象。

二、序列化对象什么时候实现Serializable接口,什么时候实现Parcelable接口接口

1、parcelable不能将数据存储到磁盘上,因为parcelable在外界有变化的时候不能很好的保持数据的持续性,因此在这种情况下,建议使用serializable,

2、在使用内存的时候,parcelable的性能比serializable高,所以推荐使用parcelable,并且serializable在序列化的时候,会产生大量的临时变量,从而引起频繁的GC

以下为两种传递对象方式的使用方法:

一、实体类继承serializable接口的方式,

1、第一步,将我们需要传递的对象所属的实体类实现serializable接口

package com.xqx.IntentDemo;

import java.io.Serializable;

/**
* People实体类,含有 name,sex,age三个属性  ,并实现类的封装
*/
public class People implements Serializable {
private String name;
private String sex;
private int age;

public String getName() {
return name;
}

public String getSex() {
return sex;
}

public int getAge() {
return age;
}

public void setName(String name) {
this.name = name;
}

public void setSex(String sex) {
this.sex = sex;
}

public void setAge(int age) {
this.age = age;
}
}


2、传递数据步骤

//创建Intent对象
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
//创建实体类
People people = new People();
people.setName("Mark");
people.setSex("boy");
people.setAge(20);
//添加传送数据
intent.putExtra("people", people);
startActivity(intent);


3、接收数据

Intent intent = getIntent();
People people = (People) intent.getSerializableExtra("people");
Log.i("DATA_SHOW","name-->"+people.getName()+",sex-->"+people.getSex()+",age-->"+people.getAge());


二、实体类实现Parcelable接口的方式
1、实体类实现parcelable接口

public class Student implements Parcelable {}


重写接口的两个方法

@Override
public int describeContents() {
return 0;
}

// 将对象的需要传递的属性 以 Parcel parcel.writXxx的形式写出,具体看属性的类型
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(sex);
parcel.writeInt(age);
}


添加一个常量CREATOR(名字大小必须固定),该常量必须实现Parcelable的内部接口:Parcelable.Creator,并实现该接口中的两个方法

public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {

@Override
public Student createFromParcel(Parcel source) {
Student student = new Student();
student.name = source.readString();
student.sex = source.readString();
student.age = source.readInt();
return student;
}

@Override
public Student[] newArray(int size) {
return new Student[size];
}
};

2、传递数据

Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
Student student = new Student();
student.setName("Alice");
student.setSex("girl");
student.setAge(19);
intent.putExtra("student",student);
startActivity(intent);


3、接收输据

Intent intent = getIntent();
Student student = intent.getParcelableExtra("student");
Log.i("DATA_SHOW","name-->"+student.getName()+",sex-->"+student.getSex()+",age-->"+student.getAge());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: