Search code examples
androidlistdoubleparcelable

Unable to read and write list of double in parcelable


I have a class having list of doubles. My class is implementing parcelable. I am getting no clue how to read and write double as parcelable.

Following is my class

public class CinemasModel implements Parcelable{

@SerializedName("ll")
private ArrayList<Double> mLl;

@SerializedName("films")
private List<FilmsModel> mFilms;

protected CinemasModel(Parcel in) {
    mLl = new ArrayList<>();
    in.readValue(this.getClass().getClassLoader());
    mFilms = new ArrayList<FilmsModel>();
    in.readList(this.mFilms, null);
}

public static final Creator<CinemasModel> CREATOR = new Creator<CinemasModel>() {
    @Override
    public CinemasModel createFromParcel(Parcel in) {
        return new CinemasModel(in);
    }

    @Override
    public CinemasModel[] newArray(int size) {
        return new CinemasModel[size];
    }
};

public CinemasModel(ArrayList<Double> ll, List<FilmsModel> films){
    this.mLl = ll;
    this.mFilms = films;
}

public CinemasModel(){

}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeValue(mLl);
    parcel.writeList(mFilms);
}
}

Any help will be appreciated.


Solution

  • Below code works well, generated by above parcelable plugin.

    public class CinemasModel implements Parcelable {
    
        @SerializedName("ll")
        private ArrayList<Double> mLl;
    
        @SerializedName("films")
        private List<FilmsModel> mFilms;
    
        protected CinemasModel(Parcel in) {
            this.mLl = new ArrayList<Double>();
            in.readList(this.mLl, Double.class.getClassLoader());
            this.mFilms = new ArrayList<FilmsModel>();
            in.readList(this.mFilms, FilmsModel.class.getClassLoader());
        }
    
        public static final Parcelable.Creator<CinemasModel> CREATOR = new Parcelable.Creator<CinemasModel>() {
            @Override
            public CinemasModel createFromParcel(Parcel source) {
                return new CinemasModel(source);
            }
    
            @Override
            public CinemasModel[] newArray(int size) {
                return new CinemasModel[size];
            }
        };
    }