我有一个包含另一个对象的对象,我想使用parcelable从一个片段发送到另一个片段,例如:

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putParcelable(mykey, Parcels.wrap(MySubObj));
fragment.setArguments(bundle);


MyObj的POJO的结构:

class MyObj {
        String value;
        MySubObj value2;

        //geters & seters

        @Parcel
        class MySubObj {
            String name;
            int age;
            ActivityDomain acdomani;

            //geters & seters

            @Parcel
            public class ActivityDomain {
                String name;
                String field;
                int countEmpl;

                //geters & seters
            }
        }
    }


因此,在Parcels.wrap(MySubObj)处出现此错误:

org.parceler.ParcelerRuntimeException: Unable to find generated Parcelable class for com.mypakage.MyObj$MySubObj , verify that your class is configured properly and that the Parcelable class com.mypakage.MyObj$MySubObj$$Parcelable is generated by Parceler.


我想念什么吗?

最佳答案

com.mypakage.MyObj$MySubObj$$Parcelable类在构建应用程序时自动生成。如果找不到,则可能有两个不同的原因:它从不存在或被Proguard删除。

因此,请确保正确配置Proguard

# Parcel library
-keep interface org.parceler.Parcel
-keep @org.parceler.Parcel class * { *; }
-keep class **$$Parcelable { *; }


并且不要忘了注释处理器的依赖性

compile 'org.parceler:parceler-api:1.1.5'
apt 'org.parceler:parceler:1.1.5'

关于java - 将Parceler POJO转换为Parcelable失败,并发生ParcelerRuntimeException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39683769/

10-12 22:30