34 votes

Arraylist dans un objet parcellable

J'ai vu beaucoup de parcelable exemples jusqu'à présent, mais pour une raison que je ne peux pas le faire fonctionner quand il devient un peu plus complexe. J'ai un objet Film, qui met en œuvre Parcelable. Ce livre objet contient certaines propriétés, telles que ArrayLists. L'exécution de mon application des résultats dans un NullPointerException lors de l'exécution de la ReadTypedList ! Je suis vraiment à court d'idées ici

public class Movie implements Parcelable{
   private int id;
   private List<Review> reviews
   private List<String> authors;

   public Movie () {
      reviews = new ArrayList<Review>();
      authors = new ArrayList<String>();
   }

   public Movie (Parcel in) {
      readFromParcel(in);
   }

   /* getters and setters excluded from code here */

   public void writeToParcel(Parcel dest, int flags) {

      dest.writeInt(id);
      dest.writeList(reviews);
      dest.writeStringList(authors);
   }

   public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() {

      public MoviecreateFromParcel(Parcel source) {
         return new Movie(source);
      }

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

   };

   /*
    * Constructor calls read to create object
    */
   private void readFromParcel(Parcel in) {
      this.id = in.readInt();
      in.readTypedList(reviews, Review.CREATOR); /* NULLPOINTER HERE */
      in.readStringList(authors);
   }
}

L'Examen de la classe:

    public class Review implements Parcelable {
   private int id;
   private String content;

   public Review() {

   }

   public Review(Parcel in) {
      readFromParcel(in);
   }

   public void writeToParcel(Parcel dest, int flags) {
      dest.writeInt(id);
      dest.writeString(content);
   }

   public static final Creator<Review> CREATOR = new Creator<Review>() {

      public Review createFromParcel(Parcel source) {
         return new Review(source);
      }

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

   private void readFromParcel(Parcel in) {
      this.id = in.readInt();
      this.content = in.readString();
   }

}

Je vous serais très reconnaissant si quelqu'un pouvait juste me faire sur la bonne voie, j'ai passer un peu de temps à chercher pour celui-ci !

Grâce à adnvance Wesley

38voto

Matthew Flaschen Points 131723

reviews et authors sont tous deux nuls. Vous devez d'abord initialiser ArrayList. Pour ce faire, vous pouvez chaîner le constructeur:

 public Movie (Parcel in) {
   this();
   readFromParcel(in); 
}
 

15voto

NickT Points 14155

Des javadocs pour

readTypedList:

Lire dans les éléments de liste donnés contenant un type d'objet particulier qui ont été écrits avec

writeTypedList (Liste)

à la position actuelle de dataPosition (). La liste doit avoir été préalablement écrite via writeTypedList (List) avec le même type d'objet.

Vous les avez écrits avec une plaine

dest.writeList (avis);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X