Parceler POJO到Parcelable失败,出现ParcelerRuntimeException

时间:2016-09-25 05:38:44

标签: java android parcelable parcel

我有一个包含另一个对象的对象,我想使用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.

我遗失了什么?

1 个答案:

答案 0 :(得分:1)

在构建应用时会自动生成课程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'