gpt4 book ai didi

java - 带有 intent.addExtra(parcelable Object) 的 NotSerializable 异常

转载 作者:行者123 更新时间:2023-11-30 02:15:43 25 4
gpt4 key购买 nike

我试图将一个包含其他对象的 ArrayList 的对象传输到 Android 中的另一个 Activity。这个想法是将它们添加到 ArrayList 并显示它们,以便可以执行相关任务。

Task ta = new Task(n, o, t, v, subList);

Intent i = new Intent(this, ActivityList.class);
i.putExtra("task", ta);
startActivity(i);

这是 Intent 。 Task 是 Parcelable,subList 是类 Subtask 的 ArrayList,也是 Parcelable。当然,既然 ArrayList 总是实现 Serializable,那么对它们进行 Parcelling 应该不是问题吧?构造函数参数是:String、byte、byte、byte、ArrayList。字节将用作 boolean 值。

如果您需要,这里是 Task 的 Parcel 代码:

@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];
}
};

谁能看出代码有什么问题?它显然在某个地方,甚至可能在 Subtask 类中,因为一旦构建了 Task 并尝试将其打包,模拟器就会崩溃。

最佳答案

如果我没看错,那么问题是您正在尝试使用 ArrayList<T>作为 Serializable,即使它不是 Serializable - 它是 Parcelable。

因此,替换

dest.writeSerializable(myList);

dest.writeTypedList(myList);

并替换

this.myList = (ArrayList<Subtask>) in.readSerializable();

this.myList = in.readTypedList(new ArrayList<Subtask>(), Subtask.CREATOR);

关于java - 带有 intent.addExtra(parcelable Object) 的 NotSerializable 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29386145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com