2017-08-23 75 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