android实体类的Parcelable

在android的Intent中,我可能要传递一些复杂的数据类型,如list<T>、或者自己定义的实体类,我们不能像传递String、int一样传递它。这时候我们应该把自定义的类型序列化。有两种方式来实现序列化,一种是实现Serializable接口,一种是实现Parcelable接口。两者的区别:实现Serializable比较简单,实体类直接implements Serializable即可;Parcelable接口使用稍微复杂,但是代码运行效率更优秀,提高代码性能。本篇主要讲怎样实现类的Parcelable

 参考文章:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html

                    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0204/3944.html

  Parcelable的源码:

public interface Parcelable {
    
    public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;
    
    public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
    
    //内容描述方法,可以不看
    public int describeContents();
    
    //相当于将实体类写入Parcel方法,
    public void writeToParcel(Parcel dest, int flags);
    //读取接口
    public interface Creator<T> {
        
        public T createFromParcel(Parcel source);
        
        public T[] newArray(int size);
    }
}

Parcelable使用步骤

      1. implements Parcelable 实现Parcelable的方法

      2.重写writeToParel方法,将实体类的参数写入

      3.重写describeContentes方法,默认返回0即可

      4.实例化静态内部对象CREATOR实现接口Parcelable.Creator

      理解:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象,也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,再通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

Parcelable示例:

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by 4 on 2016/4/6.
 */
public class Student implements Parcelable{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    //内容描述方法
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    private static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>(){
        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };
    
    protected Student(Parcel parcel){
        this.name = parcel.readString();
        this.age = parcel.readInt();
    }
}

在Android Studio中可以快速实现对象的Parcelable化

    1.安装Android Parcelable code generator插件

        打开File ---> Settings ---> Plugins ---> Browse repositories...

        

   

   

 

 

 

   重启Android studio,显示下图,则说明安装成功

   

   使用插件Parcelable化对象,右键对象空白处,选择 Generate(生成)---->Parcelable--->OK

   

   生成的代码:

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by 4 on 2016/4/5.
 */
public class Book implements Parcelable {

    private String bookName;
    private int bookNum;

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public int getBookNum() {
        return bookNum;
    }

    public void setBookNum(int bookNum) {
        this.bookNum = bookNum;
    }


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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.bookName);
        dest.writeInt(this.bookNum);
    }

    public Book() {
    }

    protected Book(Parcel in) {
        this.bookName = in.readString();
        this.bookNum = in.readInt();
    }

    public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel source) {
            return new Book(source);
        }

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

   

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值