web-dev-qa-db-fra.com

Android Parcelable et Serializable

Je sais donc qu'il est recommandé d'utiliser Parcelable au lieu de Serializable dans Android, car c'est plus rapide.

Ma question est: est-il impossible d'éviter d'utiliser le droit sérialisable?

Si j'ai un objet personnalisé que je veux sérialiser, disons que j'ai la définition de classe suivante

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

Il est facile de rendre cette parcelle, car la classe Person contient les types pris en charge par parcel.write * (), c'est-à-dire qu'il y a parcel.writeString et parcel.writeInt

Maintenant, que se passe-t-il si la classe Person est la suivante:

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

Comment suis-je supposé répartir l'objet MyCustomObj ?? Il semble que je doive réutiliser sérialisable? mais encore une fois, je pensais qu'il est lent d'utiliser sérialisable, et semble que nous n'avons pas d'autre choix que de l'utiliser dans ce cas.

Je ne comprends pas

quelqu'un peut-il me dire comment je répartirais PersonTwo dans ce cas?

30
user1118019

Le lien donné par Ajay est exactement ce que vous cherchez, comment vous pouvez le faire. Eh bien, ce que vous pouvez faire, c'est implémenter Parcelable à votre CustomObject1 et créez une classe Parcelable pour cela, puis vous pouvez utiliser cette classe Parcelable pour Parcel dans une autre classe Parcelable qui répartira à la fois le 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());
    }
  ............
}
16
Lalit Poptani

Vous devez rendre MyCustomObj parcellable.

2
Sofi Software LLC

Tous les objets composites doivent également être parcellables. Dans le cas, vous souhaitez ignorer un objet, puis ne l'utilisez pas la méthode writeToParcel.

0
Shinoo Goyal