【问题标题】:Explanation about Parcelable InterfaceParcelable接口说明
【发布时间】:2018-02-01 03:32:05
【问题描述】:

我正在研究接口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 出现编译错误。

提前谢谢你

【问题讨论】:

    标签: java android parcelable serializable


    【解决方案1】:

    如果writeToParcel()方法和构造函数private Media(Parcel parcel)在它们的body里面管理4个字段会不会有问题?

    应该没问题。

    我应该如何管理 Uri 字段?我的做法是否正确?

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

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

    Uri 没有实现Serializable。它实现了Parcelable。见the JavaDocs

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 2014-03-17
      • 2011-01-28
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      相关资源
      最近更新 更多