Android Intent 传递自定义对象

Intent 可以用来启动活动、发送广播、启动服务等,通过 putExtra 方法可以添加一些附加数据,达到传值的效果,但若想传递自定义对象的时候就无能为力了。

可以通过使用 Serializable 接口、Parcelable 接口以及转换对象为字符串的方式进行传递。

1、Serializable

表示将一个对象转为字节实现可存储或可传输的状态,一个对象能够序列化的前提是实现 Serializable 接口。

Model:

public class Person implements Serializable {

    private String name;

    public String getName() {
        return name;
    }

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

传递对象:

Person person = new Person();
person.setName("wuzy");
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("person_data",person);
startActivity(intent);

接收对象:

Person person = (Person) getIntent().getSerializableExtra("person_data");

2、Parcelable

将一个完整的对象进行分解,分解后的每一部分都是 Intent 所支持的数据类型。

Model:

public class Person implements Parcelable {

    private String name;

    public String getName() {
        return name;
    }

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

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

    /*
    将想要传递的数据写入到 Parcel 容器中
     */
    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(name);
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        /*
        用于将写入 Parcel 容器中的数据读出来,用读出来的数据实例化一个对象,并且返回
         */
        @Override
        public Person createFromParcel(Parcel in) {
            Person person = new Person();
            person.setName(in.readString());
            return person;
        }

        /*
        创建一个长度为 size 的数组并且返回,供外部类反序列化本类数组使用
         */
        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}

传递对象:

Person person = new Person();
person.setName("wuzy");
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("person_data",person);
startActivity(intent);

接收对象:

Person person =  getIntent().getParcelableExtra("person_data");

3、转化为 JSON 字符串

Model:

public class Person {
    private String name;
    public String getName() {
        return name;
    }

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

传递对象:

Person person = new Person();
person.setName("wuzy");
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("person_data",new Gson().toJson(person));
startActivity(intent);

接受对象:

String personJson = getIntent().getStringExtra("person_data");
Person person =  new Gson().fromJson(personJson, Person.class);

速度上,使用Parcelable 速度最快,Serializable 次之,转换为 JSON 字符串最慢。


转自:https://www.jianshu.com/p/6b6adaeadc15
 

猜你喜欢

转载自blog.csdn.net/LucasXu01/article/details/83786866
今日推荐