簡體   English   中英

讀取和寫入包含Parcelable Objects的ArrayLists的ArrayList以傳入Intent

[英]Read and write an ArrayList of ArrayLists containing Parcelable Objects to pass in an Intent

我剛剛將項目中的所有可序列化類更改為parcelable類。 一切都工作正常,除了那個由包含另一個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);
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM