
大家好我已经构建了一个实现Parcelable的类,但是当我读取类时,我定义的一个arrayList属性变为空.这是代码
package roblestech.laCartelera;import java.util.ArrayList;import androID.os.Parcel;import androID.os.Parcelable;public class ProgramacionPelicula implements Parcelable { public ProgramacionPelicula() { } public ProgramacionPelicula(Pelicula pelicula) { _pelicula = pelicula; } public ProgramacionPelicula(Cine cine) { _cine = cine; } public String toString() { if (getVista() == ProgramacionPelicula.VISTA_PElicula) { return getCine().getCine(); } else { return getPelicula().getTituloOriginal(); } } private int _IDProgramacion; public voID setIDProgramacion(int value) { _IDProgramacion = value; } public int getIDProgramacion() { return _IDProgramacion; } private Pelicula _pelicula;// public ArrayList<Pelicula> _peliculas = new ArrayList<Pelicula>(); public voID setPelicula(Pelicula pelicula) { _pelicula = pelicula; } public Pelicula getPelicula() { return _pelicula; } private Cine _cine; public voID setCine(Cine cine) { _cine = cine; } public Cine getCine() { return _cine; } public ArrayList<Tanda> _tandas = new ArrayList<Tanda>(); public voID setTandas(ArrayList<Tanda> value) { _tandas = value; } public voID setTandas(Object[] tandas) { for (Object tanda : tandas) { if (tanda instanceof Tanda) { _tandas.add((Tanda) tanda); } } } public voID addTanda(Tanda value) { _tandas.add(value); } public ArrayList<Tanda> getTandas() { return _tandas; } private String _sala = ""; public voID setSala(String value) { _sala = value; } public String getSala() { return _sala; } public static final int VISTA_CINE = 0; public static final int VISTA_PElicula = 1; private int _vista = VISTA_CINE; public int getVista() { return _vista; } public ProgramacionPelicula topelicula() { ProgramacionPelicula programacionPelicula = new ProgramacionPelicula(); programacionPelicula._IDProgramacion = _IDProgramacion; programacionPelicula._pelicula = _pelicula; programacionPelicula._cine = _cine; programacionPelicula._tandas = _tandas; programacionPelicula._sala = _sala; programacionPelicula._vista = VISTA_PElicula; return programacionPelicula; } @OverrIDe public int describeContents() { // Todo auto-generated method stub return 0; } @OverrIDe public voID writetoParcel(Parcel dest, int flags) { dest.writeInt(getIDProgramacion()); dest.writeString(getSala()); ArrayList<Pelicula> peliculas = new ArrayList<Pelicula>(); peliculas.add(getPelicula()); Object[] objectsPeliculas = peliculas.toArray(); dest.writeArray(objectsPeliculas); Object[] objectsTanda = getTandas().toArray(); dest.writeArray(objectsTanda); } // this is used to regenerate your object. All Parcelables must have a // CREATOR that implements these two methods public static final Parcelable.Creator<ProgramacionPelicula> CREATOR = new Parcelable.Creator<ProgramacionPelicula>() { public ProgramacionPelicula createFromParcel(Parcel in) { return new ProgramacionPelicula(in); } public ProgramacionPelicula[] newArray(int size) { return new ProgramacionPelicula[size]; } }; // example constructor that takes a Parcel and gives you an object populated // with it's values private ProgramacionPelicula(Parcel in) { this(); setIDProgramacion(in.readInt()); setSala(in.readString()); Object[] obj = in.readArray(Pelicula.class.getClassLoader()); setPelicula((Pelicula) obj[0]); setTandas(in.readArray(Tanda.class.getClassLoader())); }}大家先谢谢大家.
解决方法:
为了读/写自定义类属性,您需要使用writeParcelable和readParcelable而不是将其写入数组.
将宗地构造函数更改为:
private ProgramacionPelicula(Parcel in) { this(); setIDProgramacion(in.readInt()); setSala(in.readString()); _pelicula = in.readParcelable(Pelicula.class.getClassLoader()); setTandas(in.readArray(Tanda.class.getClassLoader()));}而你的writetoParcel方法:
@OverrIDepublic voID writetoParcel(Parcel dest, int flags) { dest.writeInt(getIDProgramacion()); dest.writeString(getSala()); dest.writeParcelable(_pelicula, flags); Object[] objectsPeliculas = peliculas.toArray(); dest.writeArray(objectsPeliculas); Object[] objectsTanda = getTandas().toArray(); dest.writeArray(objectsTanda);}如果您确实想使用数组,则必须调用readTypedArray / writeTypedArray方法.像这样:
@OverrIDepublic voID writetoParcel(Parcel dest, int flags) { ArrayList<Pelicula> List = new ArrayList<Pelicula>(); List.add(_pelicula); dest.writeTypedList(List);}private ProgrammacionPelicula(Parcel in) { ArrayList<Pelicula> List = new ArrayList<Pelicula>(); in.readTypedList(List, ProgrammacionPelicula.CREATOR);}你应该为你的Tanda物业做同样的事情.
希望这可以帮助.
总结以上是内存溢出为你收集整理的数组的Android Parcelable问题全部内容,希望文章能够帮你解决数组的Android Parcelable问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)