Android 使用Serialiable接口和Parcelable接口进行数据传送

一、前言

这篇文章主要针对Serialiable和Parcelable接口来传递对象。呈现的功能是跳转到另一个界面,然后通过toast展现我收到的数据。

二、使用Serialiable接口传递数据

1.创建需要传递的对象

//必须实现Serializable接口,此对象才有传递的资格
public class Student implements Serializable {
    public int id;
    public String name;
    public int age;

}

2.传数据

   /**
     * 跳转到Serialiable2Activity
     * @param view
     */
    public void startActivity(View view) {
        Intent intent = new Intent(this, Serialiable2Activity.class);
        //传递对象到Serialiable2Activity
        Student student = new Student();
        student.id = 9;
        student.name = "Anglin";
        student.age = 33;

        intent.putExtra("student",student);
        startActivity(intent);
    }

3.接收数据

Intent intent = getIntent();
        Student student = (Student) intent.getSerializableExtra("student");

        //提示显示
        Toast.makeText(this, "student.id" + student.id +
                "student.name"+student.name + "student.age" + student.age,
                Toast.LENGTH_SHORT).show();

二、使用Parcelable接口传递数据

1.创建需要传递的数据对象

//成为Parcelable的子类,就具备传递数据的资格
public class ParcelableStudent implements Parcelable {
    public ParcelableStudent() {
    }

    //我们自己定义的成员
    public String name;
    public int age;

    //TODO 读取的数据和写入的数据一定要一致否则会报错

    //从Parcel对象里面读出来,赋值给成员
    //构造函数
    protected ParcelableStudent(Parcel in) {
        //这个函数的意义就是从Parcel读取数据赋值给name和age
        name = in.readString();
        age = in.readInt();
    }

    //把属性写入到Parcel 对象中去
    @Override
    public void writeToParcel(@NonNull Parcel parcel, int i) {
        parcel.writeString(name);
        parcel.writeInt(age);
    }

    //先不管,是系统扩展用的
    @Override
    public int describeContents() {
        return 0;
    }


    //静态公开的成员,Parcelable内部会调用。  一定要有 自动生成 或者从文档中复制不需要去写。
    public static final Creator CREATOR = new Creator() {

        //创建ParcelableStudent对象  并且Parcel对象构建好传递给ParcelableStudent(成员数据就可以从Parcel获取了)
        @Override
        public ParcelableStudent createFromParcel(Parcel in) {
            return new ParcelableStudent(in);
        }

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

2.传送数据

  public void startActivity(View view) {
        Intent intent = new Intent(this,Parcelable2Activity.class);
        ParcelableStudent student = new ParcelableStudent();
        student.age = 20;
        student.name = "Anglin";

        intent.putExtra("student",student);
        startActivity(intent);
    }

3.接收数据

    Intent intent = getIntent();
        ParcelableStudent student = intent.getParcelableExtra("student");
        //显示Parcelable1Activity 传递过来的对象 里面的数据
        Toast.makeText(this, "student.name" + student.name + "student.age" + student.age, Toast.LENGTH_SHORT).show();
    

四、总结

那么在编写android代码 的时候这两个我们改选择使用哪个呢?一般我们会选择使用Parcelabe,因为parcelable的性能更高。Serialiable面向jvm使用java序列化的形式传递对象的。android平台的虚拟机更适合Parcelable。

所以android开发必须使用Parcelabe因为这个是支持  兼容安卓虚拟机。我们主推的方式

你可能感兴趣的:(Android,android)