Arraylist in parcelable object

Widziałem do tej pory wiele parcelowalnych przykładów, ale z jakiegoś powodu nie mogę go uruchomić, gdy robi się trochę bardziej skomplikowany. Mam obiekt filmowy, który implementuje Parcelable. Ten obiekt książki zawiera pewne właściwości, takie jak ArrayLists. Uruchamianie mojej aplikacji powoduje wystąpienie NullPointerException podczas wykonywania ReadTypedList ! Naprawdę nie mam tu pomysłów

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);
   }
}

Klasa recenzji:

    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();
   }

}
Byłabym bardzo wdzięczna, gdyby ktoś mógł mnie po prawej track, spędziłem sporo czasu szukając tego !

Thanks in adnvance Wesley

Author: Wesley, 2011-01-16

2 answers

reviews i authors są zerowe. Powinieneś najpierw zainicjować ArrayList. Jednym ze sposobów na to jest łańcuch konstruktora:

public Movie (Parcel in) {
   this();
   readFromParcel(in); 
}
 38
Author: Matthew Flaschen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-16 10:13:40

From the javadocs for readTypedList:

Wczytanie do podanej listy pozycji zawierających określony typ obiektu które zostały napisane writeTypedList(List)

Obecnie dataPosition(). Lista musi być wcześniej napisana przez writeTypedList(List) z tym samym typem obiektu.

Napisałeś je prostym

dest.writeList(reviews);
 15
Author: NickT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-03 11:34:01