就像标题所说,我不知道为什么当我尝试传递一个包含另一个对象的对象时,该对象使用
writeParcelable
和 readParcelable
弄乱了我传递的数据?
我的意思是搞砸了。
ID
被 Name
读取,并且 Name
没有被传递,因为没有任何东西可以接收数据,并且对象可能会也可能不会被传递。
如果我只是通过 parcelable 传递字符串、整数、Double 就没问题,但是当我尝试传递一个也实现了 parcelable 的对象时就不行了。
也许我用错了方法?据我了解,因为该对象包含另一个实现 parcelable 的对象,所以我应该使用 readParcelable 和 writeParcelable。但如果错了,谁能告诉我应该使用哪种方法以及如何使用它?
提前谢谢你。
这里是可打包的对象:
第一个对象:
public class Absen implements Parcelable{
private String ID;
private String Key;
private String Name;
private int Age;
private Anak Anak;
public Absen(){
//empty constructor
}
public Absen(String ID, String Key, String Name, int Age, Anak Anak)
{
this.ID = ID;
this.Key = Key;
this.Name = Name;
this.Anak = Anak;
this.Age = Age;
}
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
protected Absen (Parcel parcel)
{
this.ID = parcel.readString();
this.Key = parcel.readString();
this.Name = parcel.readString();
this.Anak = parcel.readParcelable(Anak.class.getClassLoader());
this.Age = parcel.readInt();
}
@Override
public void writeToParcel(@NonNull Parcel parcel, int i)
{
parcel.writeString(getID());
parcel.writeString(getKey());
parcel.writeString(getName());
parcel.writeParcelable(getAnak(),i);
parcel.writeInt(getAge());
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<Absen> CREATOR = new Creator<Absen>() {
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@Override
public Absen createFromParcel(Parcel parcel) { return new Absen(parcel);}
@Override
public Absen[] newArray(int i) {
return new Absen[i];
}
};
//Setters Getters....
}
第二个对象
public class Anak implements Parcelable {
private String ID;
private String Key;
private String Name;
private String parentName;
public Anak{
//empty constructor
}
public Anak(String ID, String Key, String Name, String parentName)
{
this.ID = ID;
this.Key = Key;
this.Name = Name;
this.parentName = parentName;
}
protected Anak (Parcel parcel)
{
this.ID = parcel.readString();
this.Key = parcel.readString();
this.Name = parcel.readString();
this.parentName = parcel.readString();
}
@Override
public void writeToParcel(Parcel parcel, int i)
{
parcel.writeString(getID());
parcel.writeString(getKey());
parcel.writeString(getName());
parcel.writeString(getParentName());
}
@Override
public int describeContents(){ return 0;}
public static final Creator<Anak> CREATOR = new Creator<Anak>() {
@Override
public Anak createFromParcel(Parcel parcel) {
return new Anak(parcel);
}
@Override
public Anak[] newArray(int i) {
return new Anak[i];
}
};
}