告别手写parcelable

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheyiliu/article/details/46553129

在eclipse中

用法

  1. 下载该开源项目
  2. 导入到IDE
  3. 参照下载下来的实例编写json文件来描述目标类
  4. 运行该java工程
  5. 生成的目标类在output文件夹
  6. 拷贝生成的类到需要它的工程(注意:这整个使用过程没有接下来在android studio中的方法简单)

在android studio中

  • 推荐安装插件, android parcelable code generator
    这里写图片描述

用法

  • 书写自己的目标类
public class DemoParcelable {
    String aString;
    int aInt;
    double aDouble;
    HashMap<String, String> aHashMap;
    ArrayList<String> aArrayList;
    DemoAnotherClass anotherClass;

    class DemoAnotherClass{
        ConcurrentHashMap<String, String> aConcurrentHashMap;
    }
}
  • 在类名处alt + insert,在弹出界面选择Parcelable,最后生成的代码如下
public class DemoParcelable implements Parcelable {
    public static final Parcelable.Creator<DemoParcelable> CREATOR = new Parcelable.Creator<DemoParcelable>() {
        public DemoParcelable createFromParcel(Parcel source) {
            return new DemoParcelable(source);
        }

        public DemoParcelable[] newArray(int size) {
            return new DemoParcelable[size];
        }
    };
    String aString;
    int aInt;
    double aDouble;
    HashMap<String, String> aHashMap;
    ArrayList<String> aArrayList;
    DemoAnotherClass anotherClass;

    public DemoParcelable() {
    }

    protected DemoParcelable(Parcel in) {
        this.aString = in.readString();
        this.aInt = in.readInt();
        this.aDouble = in.readDouble();
        this.aHashMap = (HashMap<String, String>) in.readSerializable();
        this.aArrayList = in.createStringArrayList();
        this.anotherClass = in.readParcelable(DemoAnotherClass.class.getClassLoader());
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.aString);
        dest.writeInt(this.aInt);
        dest.writeDouble(this.aDouble);
        dest.writeSerializable(this.aHashMap);
        dest.writeStringList(this.aArrayList);
        dest.writeParcelable(this.anotherClass, flags);
    }

    static class DemoAnotherClass implements Parcelable {
        public static final Creator<DemoAnotherClass> CREATOR = new Creator<DemoAnotherClass>() {
            public DemoAnotherClass createFromParcel(Parcel source) {
                return new DemoAnotherClass(source);
            }

            public DemoAnotherClass[] newArray(int size) {
                return new DemoAnotherClass[size];
            }
        };
        ConcurrentHashMap<String, String> aConcurrentHashMap;

        public DemoAnotherClass() {
        }

        protected DemoAnotherClass(Parcel in) {
            this.aConcurrentHashMap = (ConcurrentHashMap<String, String>) in.readSerializable();
        }

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeSerializable(this.aConcurrentHashMap);
        }
    }
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页