Android Parcelable and Serializable

30,794

Solution 1

The link given by Ajay is the exact what you are looking for, how you can do it. Well, what you can do is implement Parcelable to your CustomObject1 and create a Parcelable class for it and then you can use that Parcelable class to Parcel it inside another Parcelable class that will Parcel both the CustomObjects.

public class CustomObject1 implements Parcelable {

   // parcelable code CustomObject1
}

public class CustomObject2 implements Parcelable {

    private CustomObject1 obj1;

   // add  CustomObject1 here with getter setter
   // parcelable code for CustomObject2 

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(obj1, flags);
    }  
    private void readFromParcel(Parcel in) {
        obj1 = in.readParcelable(CustomObject1.class.getClassLoader());
    }
  ............
}

Solution 2

You need to make MyCustomObj parcelable.

Share:
30,794
user1118019
Author by

user1118019

Updated on June 09, 2020

Comments

  • user1118019
    user1118019 about 4 years

    So i know it is recommended to use Parcelable instead of Serializable in android, because it is faster.

    My question is: is that impossible to avoid using Serializable right?

    If I have a custom object i want to serialize, let's say I have the following class definition

    public class Person {
       String name;
       int Age;
       ...
       ....
    }
    

    Making this parcelable is easy, because the Person class contains the types parcel.write*() supports, i.e. there is parcel.writeString and parcel.writeInt

    Now, what if the Person class is the following:

    public class PersonTwo {
       MyCustomObj customObj;
       String name;
       int Age;
       ...
       ....
    }
    

    How am I suppose to parcel the MyCustomObj object?? It seems I need to use serializable again? but again, I thought it is SLOW to use serializable, and seems we have no choice but to use it in this case.

    I don't understand

    can someone tell me how I would parcel PersonTwo in this case?

    • afrish
      afrish about 9 years
      I suggest you to use Serializable. According to the tests on Nexus 5 it is much faster, than Parcelable. See bitbucket.org/afrishman/androidserializationtest. The main thing to remember is that Serializable is slow only with default settings. If you use manual serialization, it is much, much faster. Check the link above for details.
  • user1118019
    user1118019 over 12 years
    Thanks dude, i would have accepted both you and ajay as answer, but seems i can only pick one. anyway thank you!!
  • Jono
    Jono about 11 years
    Yes this is spot on and how i do it. Just make every single object required, parcelable because at the end of it all, the root object will contain primitive or String types
  • Jakub Chromiak
    Jakub Chromiak over 9 years
    Please add some code so whe could also check out if the problem lays within android itself.