0

こんにちは、次のように Parcelable を実装するクラスがあります。

public class adapterSource implements Parcelable {
   String adiSoyadi;
   String isemriTipi;
   String ililce;
   String mahalle;
   String saat;
   String durum;

   private List<adapterSource> s;

   public adapterSource(String adiSoyadi, String isemriTipi,String ililce, String mahalle, String saat, String durum ) {
      this.adiSoyadi = adiSoyadi;
      this.isemriTipi = isemriTipi;
      this.ililce = ililce; 

      this.mahalle = mahalle;

      this.saat = saat;
      this.durum = durum;
   }

   public adapterSource(Parcel in) {
      s = new ArrayList<adapterSource>();
      in.readList(s, in.getClass().getClassLoader());
      adiSoyadi=in.readString();
      isemriTipi=in.readString();
      ililce=in.readString();
      mahalle=in.readString();
      saat=in.readString();
      durum=in.readString();
   }

   public int describeContents() {
      return 0;
   }

   public void writeToParcel(Parcel arg0, int arg1) {
   }

   public static final Parcelable.Creator<adapterSource> CREATOR = new Parcelable.Creator<adapterSource>() {
      public adapterSource createFromParcel(Parcel in) {
         return new adapterSource(in);
      }

      public adapterSource[] newArray(int size) 
      {
         return new adapterSource[size];
      }
   };
}

そして、私はこのような1つのアクティビティでこのクラスのインスタンスを作成しようとしています:

adapterSource[] source = new adapterSource[7];
source[0] = (adapterSource) new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[1] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[2] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[3] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[4] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[5] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
source[6] = new adapterSource("isa", "isa", "asd", "asd", "asd", "asd");
Intent in = new Intent().setClass(this, MainListActivity.class);

in.putExtra("source", source);

startActivity(in);

そして、私はこのような別のアクティビティから呼び出しています:

adapterSource[] ada= (adapterSource[]) this.getIntent().getParcelableArrayExtra("source");

アンマーシャリングエラーが発生しています。何が問題ですか。助けてください...

4

1 に答える 1

0

実際のオブジェクトのシリアライゼーションwriteToParcel()/フラット化はここで行われます。オブジェクトの各要素を個別に Parcel する必要があります。

2 つ目in.readList();は、間違った方法で使用していることです。Parcelable オブジェクトにカスタム オブジェクトのリストが含まれている場合は、カスタム クラスも Parcelable にする必要があり、次を使用する必要があります。in.readList();

次に、コードは次のようになります

public class adapterSource implements Parcelable {
    String adiSoyadi;
    String isemriTipi;
    String ililce;
    String mahalle;
    String saat;
    String durum;

    public adapterSource(String adiSoyadi, String isemriTipi, String ililce,
            String mahalle, String saat, String durum) {
        this.adiSoyadi = adiSoyadi;
        this.isemriTipi = isemriTipi;
        this.ililce = ililce;
        this.mahalle = mahalle;
        this.saat = saat;
        this.durum = durum;
    }

    public adapterSource(Parcel in) {
        adiSoyadi = in.readString();
        isemriTipi = in.readString();
        ililce = in.readString();
        mahalle = in.readString();
        saat = in.readString();
        durum = in.readString();
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel arg0, int arg1) {
        arg0.writeString(adiSoyadi);
        arg0.writeString(isemriTipi);
        arg0.writeString(ililce);
        arg0.writeString(mahalle);
        arg0.writeString(saat);
        arg0.writeString(durum);
    }

    public static final Parcelable.Creator<adapterSource> CREATOR = new Parcelable.Creator<adapterSource>() {
        public adapterSource createFromParcel(Parcel in) {
            return new adapterSource(in);
        }

        public adapterSource[] newArray(int size) {
            return new adapterSource[size];
        }
    };
}
于 2012-08-14T16:39:31.970 に答える