gpt4 book ai didi

android parcelable 引用另一个 parcelable 循环依赖

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:54 33 4
gpt4 key购买 nike

确实是相当简单的场景,但我在 Google 上找不到任何相关内容,所以这里是:

class ContainerClass implements Parcelable {
List<ItemClass> _items;
(...)

public void writeToParcel( Parcel p, int args ) {
p.writeList( _items );
(...)
}
}

class ItemClass implements Parcelable {
ContainerClass _containerRef;
(...)

public void writeToParcel( Parcel p, int args ) {
p.writeParcelable( _containerRef );
(...)
}
}

这将不可避免地循环并溢出堆栈。

我的问题:我应该如何处理必须将上述类型的对象传递给新 Activity 的情况。

(对于 CommonsWare)Parcelable 实现似乎确实没有检查并避免循环依赖。将类名替换为上述名称的 Stacktrace:

08-12 10:17:45.233    5590-5590/com.package E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.StackOverflowError
at com.package.ContainerClass.writeToParcel(ContainerClass.java:139)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.package.ItemClass.writeToParcel(ItemClass.java:182)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
at android.os.Parcel.writeList(Parcel.java:622)
at com.package.ContainerClass.writeToParcel(ContainerClass.java:144)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.package.ItemClass.writeToParcel(ItemClass.java:182)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at android.os.Parcel.writeValue(Parcel.java:1173)
at android.os.Parcel.writeList(Parcel.java:622)

最佳答案

This will inevitably loop and overflow the stack.

据我所知,打包过程不处理 circular object graphs .我刚提交 an issue to get this better documented .

一种解决方法是不执行 p.writeParcelable( _containerRef );。相反,在 ContainerClass 中,在您的 ContainerClass(Parcel in) 构造函数中(或者您的 CREATOR 正在处理它),在读入您的 _items 列表,遍历该列表并告诉每个子项有关其父项的信息。

关于android parcelable 引用另一个 parcelable 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176832/

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