Android Parcelable 数组问题

2024-03-10

大家好,我已经构建了一个实现 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()));


    }
}

先谢谢大家了。


传递数组的另一种方法是使用类型化数组,如下所示:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(mMyArray.length);
    dest.writeTypedArray(mMyArray, flags);
}

并像这样读回来:

public MyParcelableObject(Parcel in) {
    mMyArray = new MyOtherParcelableObject[in.readInt()];
    in.readTypedArray(mMyArray, MyOtherParcelableObject.CREATOR);
}

简而言之,在写入数组的值之前,将数组的长度作为 int 值写入 Parcelable,这样您就可以在读取数组之前创建一个相同大小的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Parcelable 数组问题 的相关文章

  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • Android构建apk:控制MANIFEST.MF

    Android 构建 APK 假设一个 apk 包含一个库 jar 例如 foo jar 该库具有 META INF MANIFEST MF 这对于它的运行很重要 但在APK中有一个包含签名数据的MANIFEST MF 并且lib jar
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐