当前位置: 首页 > 知识库问答 >
问题:

Intent.AddExtra(可parcelable对象)的NotSerializable异常

龙俊美
2023-03-14
Task ta = new Task(n, o, t, v, subList);

    Intent i = new Intent(this, ActivityList.class);
    i.putExtra("task", ta);
    startActivity(i);
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(taskName);
    dest.writeByte((byte) (soundCueOne ? 1 : 0));
    dest.writeByte((byte) (soundCueTwo ? 1 : 0));
    dest.writeByte((byte) (vibrCue ? 1 : 0));
    dest.writeSerializable(myList);
}

private Task(Parcel in) {
    this.taskName = in.readString();
    this.soundCueOne = in.readByte() != 0;
    this.soundCueTwo = in.readByte() != 0;
    this.vibrCue = in.readByte() != 0;
    this.myList = (ArrayList<Subtask>) in.readSerializable();
}

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public Task createFromParcel(Parcel in) {
        return new Task(in);
    }

    public Task[] newArray(int size) {
        return new Task[size];
    }
};

有人能看到代码出了什么问题吗?很明显,它就在某个地方,甚至可能在子任务类中,因为一构造任务并尝试打包它,仿真器就会崩溃。

共有1个答案

仲孙献
2023-03-14

如果我没看错,那么问题是您试图将ArrayList 用作可序列化的,尽管它不是可序列化的--它是可Parcelable的。

因此,改为

dest.writeSerializable(myList);

dest.writeTypedList(myList);
this.myList = (ArrayList<Subtask>) in.readSerializable();
this.myList = in.readTypedList(new ArrayList<Subtask>(), Subtask.CREATOR);
 类似资料:
  • 我试图在包中保存对象的ArrayList(列表搁置项),以便下次打开活动时检索它。 (活动从firestore获取信息,我想减少每次打开活动时的读取次数并缩短加载时间)。 但我得到了这个错误信息: “android.os.Bundle”中的putParcelableArrayList(java.lang.String,java.util.ArrayList)不能应用于“(java.lang.Str

  • 我正在使用一个可打包对象来传递一个意图。我的对象看起来是这样的 公共类配方实现Parcelable{private List Recipe=null;private List firedents=null;private String preparation; 我调试了这部分代码,我知道sendRecipe对象是实例化的,数据是正确的。所以我把这个东西放在意向性上,然后把它发送到下一个活动 在这个

  • 本文向大家介绍Android中的Parcelable序列化对象,包括了Android中的Parcelable序列化对象的使用技巧和注意事项,需要的朋友参考一下 今天查阅资料,简单了解了一下Parcelable接口,它是android提供的序列化对象的接口,比java中的 Serializable高效些。通过这个接口序列化对象主要有两步: 1.实现public void writeToParcel(

  • 问题内容: 我有一个ConstantData类,该类保存我的JSON索引,我需要在活动之间附加传递它们。但在此之前,我必须首先对此类的对象实现Parcelable。 我的问题是,如何在这里的类中声明对象并将每个对象放入变量中? 我是新手,现在我一无所有。谢谢。请随意在下面修改我的代码。 ConstantData.java 如果我的问题不够清楚,您可以查找以下问题:如何使用Intent将对象从一个A

  • 在我的Android应用程序中,我想将我的自定义对象传递给另一个活动。我正在使用意图 在调用活动 我也在我的模型类中实现了Serilizable。但是当我运行应用程序时,它显示 JAVAlang.RuntimeException:Parcelable在写入可序列化对象时遇到IOException 日志显示了这一点

  • 问题内容: 我想使用实现的DataWrapper将ArrayList对象传递给另一个活动。 我遵循此处提供的答案:将用户定义对象的arraylist传递给Intentandroid。 我开始从另一个活动库的。这就是我传递ArrayList对象的方式: 我实现了DataWrapper类,如下所示: 并得到错误。这是我的Logcat: 我在上面的链接中遵循了答案(通过数组列表对象),但得到了错误,是什