数组的Android Parcelable问题

数组的Android Parcelable问题,第1张

概述大家好我已经构建了一个实现Parcelable的类,但是当我读取类时,我定义的一个arraylist属性变为空.这是代码packageroblestech.laCartelera;importjava.util.ArrayList;importandroid.os.Parcel;importandroid.os.Parcelable;publicclassProgramacionPeliculaimplemen

大家好我已经构建了一个实现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问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1116298.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存