2017-08-23 11 views
0

J'étudie l'interface Parcelable et je rencontre des problèmes pour essayer de comprendre comment cela fonctionne. Sur internet, je ne trouve pas de réponses à certaines de mes questions:Explication à propos de l'interface parcelable

Je vous montrer ma classe:

public class Media implements IModel, Parcelable{ 

    private Uri uri; 
    private long _ID; 
    private boolean isOnDb = false; 
    private boolean isSelected = false; 

    /*Getter and setter methods 
    ........ 
    */  


    /*********************************** Parcelable **********************************/ 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Media>(){ 
     @Override 
     public Media createFromParcel(Parcel parcel) { 
      return new Media(parcel); 
     } 

     @Override 
     public Media[] newArray(int i) { 
      return new Media[i]; 
     } 
    }; 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeParcelable(uri, 1); 
     parcel.writeLong(_ID); 
     parcel.writeByte((byte) (isOnDb ? 1 : 0)); 
     parcel.writeByte((byte) (isSelected ? 1 : 0)); 
    } 

    private Media (Parcel parcel){ 
     uri = parcel.readParcelable(Uri.class.getClassLoader()); 
     _ID = parcel.readLong(); 
     isOnDb = parcel.readByte() != 0; 
     isSelected = parcel.readByte() != 0; 
    } 
} 

Question 1 Comme vous pouvez le voir, j'ai un constructeur avec seulement 2 champ Media(Uri uri, long _ID). Est-ce un problème si la méthode writeToParcel() et le constructeur private Media (Parcel parcel) menage 4 champs à l'intérieur de leur corps? Je veux dire ... les champs gérés par private Media (Parcel parcel) et writeToParcel() devraient refléter le nombre de champs passés à "l'autre" contructor?

Question 2 Comment gérer un champ Uri? Est-ce correct comme je l'ai fait? P.S .: Je ne comprends pas pourquoi je ne peux pas écrire parcel.writeSerializable(Uri); Je reçois une erreur de compilation même si Uri classe implements Serializable.

Nous vous remercions à l'avance

Répondre

1

Est-ce un problème si la méthode writeToParcel() et le constructeur privé Médias (parcelle colis) menage 4 champs à l'intérieur de leur corps?

Cela devrait aller.

Comment gérer un champ Uri? Est-ce correct comme je l'ai fait?

Ce que vous avez devrait aller bien. Personnellement, je voudrais le convertir vers et à partir d'une chaîne, juste parce que je déteste jouer avec les chargeurs de classe.

Je reçois une erreur de compilation même si la classe Uri implémente Serializable.

Uri n'implémente pas Serializable. Il implémente Parcelable. Voir the JavaDocs.

+0

Merci l'homme :) – MDP