Чтение и запись ArrayList из ArrayLists, содержащих Parcelable Objects, для передачи в намерении

Я просто изменил все сериализуемые классы в моем проекте на классные классы. Все работает нормально, за исключением одного класса, который состоит из ArrayList, содержащего другой ArrayList. Я уже отлаживался. При записи этого массива ArrayList нет ошибки. Но при чтении я получаю сообщение об ошибке.

Это класс, в котором происходит ошибка:

public class Timetable implements Parcelable { private int actLap = 0; private ArrayList<Lap> timetable; private ArrayList<Location> loggedLocations; private Date startTime; ... ... public void writeToParcel(Parcel out, int flags) { out.writeInt(actLap); out.writeTypedList(timetable); //no error here out.writeTypedList(loggedLocations); ... ... private Timetable(Parcel in) { actLap = in.readInt(); in.readTypedList(timetable, Lap.CREATOR); //error after this line in.readTypedList(loggedLocations, Location.CREATOR); startTime = (Date)in.readSerializable(); bestLap = in.readParcelable(Lap.class.getClassLoader()); track = in.readParcelable(Track.class.getClassLoader()); description = in.readString(); } 

Вот и другие классы:

 public class Lap implements Parcelable { private ArrayList<Time> sectorTimes = new ArrayList<Time>(); private Time laptime; ... ... public void writeToParcel(Parcel out, int flags) { out.writeTypedList(sectorTimes); out.writeParcelable(laptime,flags); } public static final Parcelable.Creator<Lap> CREATOR = new Parcelable.Creator<Lap>() { public Lap createFromParcel(Parcel in) { return new Lap(in); } public Lap[] newArray(int size) { return new Lap[size]; } }; private Lap(Parcel in) { in.readTypedList(sectorTimes, Time.CREATOR); laptime = in.readParcelable(Time.class.getClassLoader()); } 

И этот класс:

 public class Time implements Parcelable { private long timeLong; private String timeString;... ... public void writeToParcel(Parcel out, int flags) { out.writeLong(timeLong); out.writeString(timeString); } public static final Parcelable.Creator<Time> CREATOR = new Parcelable.Creator<Time>() { public Time createFromParcel(Parcel in) { return new Time(in); } public Time[] newArray(int size) { return new Time[size]; } }; private Time(Parcel in) { timeLong = in.readLong(); timeString = in.readString(); } 

Как я уже сказал, все работает нормально (есть более Parcelable классы, которые я передаю с намерениями (включая один ArrayList) и которые я сохраняю в файлах). Можете ли вы, ребята, помочь мне написать и прочитать этот двойной ArrayList? заранее спасибо

Если ваш код опубликован, вам просто не хватает инициализации ArrayLists, т. Е.

 private Timetable(Parcel in) { // readTypeList() needs an existing List<> to load. timetable = new ArrayList<Lap>(); loggedLocations = new ArrayList<Location>(); actLap = in.readInt(); in.readTypedList(timetable, Lap.CREATOR); in.readTypedList(loggedLocations, Location.CREATOR); ...