我正在研究界面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);
即使Uri
类implements Serializable
。
提前谢谢
答案 0 :(得分:1)
如果方法writeToParcel()和构造函数私有媒体(Parcel parcel)管理其正文中的4个字段,是否会出现问题?
那应该没事。
我应该如何管理Uri领域?这样做是否正确?
你所拥有的应该没事。就个人而言,我会将其转换为字符串,因为我讨厌搞乱类加载器。
即使Uri类实现了Serializable,我也会遇到编译错误。
Uri
未实施Serializable
。它实现了Parcelable
。请参阅the JavaDocs。