Java 可分包循环依赖
您拥有实现Parcelable的A类,并且包含B类对象的Java 可分包循环依赖,java,android,parcelable,Java,Android,Parcelable,您拥有实现Parcelable的A类,并且包含B类对象的列表 实现Pracelable并包含a类字段的类B 我为每个类实现了Parcelable方法,我为Parcelable的write方法获得了stackoverflow,这是正常的,因为每个类都在循环中调用另一个类 有没有办法避免这种情况 用户类别: public class User implements Parcelable { private String mName; private List<Collection> m
列表
实现Pracelable并包含a类字段的类B
我为每个类实现了Parcelable方法,我为Parcelable的write
方法获得了stackoverflow,这是正常的,因为每个类都在循环中调用另一个类
有没有办法避免这种情况
用户类别:
public class User implements Parcelable {
private String mName;
private List<Collection> mCollections;
...
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mName);
out.writeList(mCollections); // Line 76
}
...
堆栈跟踪:
02-02 17:44:07.807 5113-5113/com.example.crysis473.cm E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.StackOverflowError
at android.os.Parcel.writeString(Parcel.java:513)
at android.os.Parcel.writeParcelable(Parcel.java:1249)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
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.example.crysis473.cm.User.writeToParcel(User.java:76)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
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.example.crysis473.cm.User.writeToParcel(User.java:76)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
..........
实际上,它是一个包含在类a中的对象B的列表,而类a的对象包含在对象B中,我将尝试以干净的方式发布代码。@Blackbelt我发布了代码,谢谢!循环中应该发生的唯一原因是用户
的集合
对象包含相同的用户
。如果是这种情况,您需要重新建模数据。听起来您需要的只是一种获取要显示的最小数据集的方法,然后根据需要异步获取其余数据。我不确定这是否可行,但您能否在打包时排除用户
引用,然后在取消打包时派生它?因此,当您从包裹中解包用户
时,请查看其集合列表,并添加对该用户的引用。
02-02 17:44:07.807 5113-5113/com.example.crysis473.cm E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.StackOverflowError
at android.os.Parcel.writeString(Parcel.java:513)
at android.os.Parcel.writeParcelable(Parcel.java:1249)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
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.example.crysis473.cm.User.writeToParcel(User.java:76)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
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.example.crysis473.cm.User.writeToParcel(User.java:76)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
at com.example.crysis473.cm.Collection.writeToParcel(Collection.java:205)
at android.os.Parcel.writeParcelable(Parcel.java:1254)
..........