0

I have a object that contains another object and I'd like to send to from one fragment to another, using parcelable, like:

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

The structure of the MyObj's 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
            }
        }
    }

So at Parcels.wrap(MySubObj) I am getting this error:

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.

I am missing something?

Vasile Doe
  • 1,674
  • 1
  • 24
  • 40

1 Answers1

1

The class com.mypakage.MyObj$MySubObj$$Parcelable gets auto-generated while building your app. If it's not found, there might be two different reasons for this: It never existed in the first place or was removed in the build by Proguard.

So make sure to configure Proguard correctly

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

And don't forget the dependencies for the annotation processor

compile 'org.parceler:parceler-api:1.1.5'
apt 'org.parceler:parceler:1.1.5'
tynn
  • 38,113
  • 8
  • 108
  • 143
  • if I ad apt `org.parceler:parceler:1.1.5 ` I am getting `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.` – Vasile Doe Sep 25 '16 at 06:09