Arraylist в предмет посылки
До сих пор я видел много примерных примеров, но по какой-то причине я не могу заставить его работать, когда он становится немного сложнее. У меня есть объект Movie, который реализует Parcelable. Этот объект книги содержит некоторые свойства, такие как ArrayLists. Запуск моего приложения приводит к исключению NullPointerException при выполнении ReadTypedList! У меня действительно нет идей здесь
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);
}
}
Класс обзора:
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();
}
}
Я был бы очень признателен, если бы кто-то мог просто привести меня на правильный путь, я потратил немало времени на поиск этого!
Спасибо заранее Wesley
2 ответа
reviews
а также authors
оба нулевые. Сначала вы должны инициализировать ArrayList. Один из способов сделать это - связать конструктор:
public Movie (Parcel in) {
this();
readFromParcel(in);
}
Из ага для readTypedList
:
Прочитайте в данный список элементов, содержащих определенный тип объекта, которые были написаны с
writeTypedList(List)
на текущий dataPosition()
, Список должен быть ранее написан через writeTypedList(List)
с тем же типом объекта.
Вы написали их с простой
dest.writeList(reviews);