关于Parcelable接口的解释

时间:2017-08-23 13:43:24

标签: java android parcelable serializable

我正在研究界面Parcelable,我正面临一些问题,试图完全理解它是如何工作的。 在互联网上,我没有找到一些问题的答案:

我告诉你我的班级:

public class Media implements IModel, Parcelable{

    private Uri uri;
    private long _ID;
    private boolean isOnDb = false;
    private boolean isSelected = false;

    /*Getter and setter methods
    ........
    */    


    /***********************************   Parcelable **********************************/
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Media>(){
        @Override
        public Media createFromParcel(Parcel parcel) {
            return new Media(parcel);
        }

        @Override
        public Media[] newArray(int i) {
            return new Media[i];
        }
    };

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeParcelable(uri, 1);
        parcel.writeLong(_ID);
        parcel.writeByte((byte) (isOnDb ? 1 : 0));
        parcel.writeByte((byte) (isSelected ? 1 : 0));
    }

    private Media (Parcel parcel){
        uri = parcel.readParcelable(Uri.class.getClassLoader());
        _ID = parcel.readLong();
        isOnDb = parcel.readByte() != 0;
        isSelected = parcel.readByte() != 0;
    }
}

问题1 如您所见,我有一个只有2个字段Media(Uri uri, long _ID)的构造函数。如果方法writeToParcel()和构造函数private Media (Parcel parcel)管理其体内的4个字段,这是一个问题吗?我的意思是......由private Media (Parcel parcel)writeToParcel()管理的字段应该反映传递给“其他”构造函数的字段数量?

问题2 我该如何管理Uri字段?这样做是否正确? P.S。:我不明白为什么我不能写parcel.writeSerializable(Uri); 即使Uriimplements Serializable

,我也会收到编译错误

提前谢谢

1 个答案:

答案 0 :(得分:1)

  

如果方法writeToParcel()和构造函数私有媒体(Parcel parcel)管理其正文中的4个字段,是否会出现问题?

那应该没事。

  

我应该如何管理Uri领域?这样做是否正确?

你所拥有的应该没事。就个人而言,我会将其转换为字符串,因为我讨厌搞乱类加载器。

  

即使Uri类实现了Serializable,我也会遇到编译错误。

Uri未实施Serializable。它实现了Parcelable。请参阅the JavaDocs