【问题标题】:Parceler POJO to Parcelable fails with ParcelerRuntimeExceptionParceler POJO 到 Parcelable 失败并出现 ParcelerRuntimeException
【发布时间】:2016-09-25 13:57:11
【问题描述】:

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

我错过了什么?

【问题讨论】:

    标签: java android parcelable parcel


    【解决方案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'
    

    【讨论】:

    • 如果我适合org.parceler:parceler:1.1.5 我得到Error:(32, 0) Could not find method apt() for arguments [org.parceler:parceler:1.1.5] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2017-11-01
    • 2014-05-21
    相关资源
    最近更新 更多