Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可分包循环依赖_Java_Android_Parcelable - Fatal编程技术网

Java 可分包循环依赖

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

您拥有实现Parcelable的A类,并且包含B类对象的
列表

  • 实现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)
       ..........