为什么 writeParcelable 和 readParcelable 会弄乱正在传递的数据?

问题描述 投票:0回答:0

就像标题所说,我不知道为什么当我尝试传递一个包含另一个对象的对象时,该对象使用

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];
        }
    };
}
java android parcelable
© www.soinside.com 2019 - 2024. All rights reserved.