2017-08-23 159 views
0

我正在学习界面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

它是一个问题,如果该方法writeToParcel()和构造私人媒体(邮包包裹)家政4个它们体内领域?

这应该没问题。

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

你有什么应该没问题。就个人而言,我会将它转换为字符串和从字符串转换,仅仅因为我讨厌与类加载器混淆。

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

Uri不执行Serializable。它实施Parcelable。请参阅the JavaDocs

+0

谢谢你:) – MDP