Comment transmettre des données entre des activités avec Android Parcelable

introduction

Nous avons souvent besoin de transmettre des données entre les activités d'une application Android. Un moyen facile de faire cela est avec Intent.putExtra (), mais si vous avez beaucoup de données structurées à transmettre, Parcelable peut être une meilleure solution. Dans cet article, je vais vous montrer comment Parcelable facilite la sérialisation des classes pour le partage entre les activités..

Pourquoi Parcelable?

Parcelable est une interface exclusivement Android. Il permet aux développeurs de sérialiser une classe afin que ses propriétés soient facilement transférées d'une activité à une autre. Ceci est fait en lisant et en écrivant des objets de Parcels, qui peuvent contenir des données aplaties dans des conteneurs de messages. 

Création de l'activité principale et de la mise en page

Notre activité principale se chargera de la collecte des détails du livre. Commençons par mettre en place notre onCreate méthode.

package com.tutsplus.code.android.bookparcel; importer android.support.v7.app.AppCompatActivity; importer android.os.Bundle; Classe publique MainActivity étend AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); //…

Ensuite, ouvrez activity_main.xml pour configurer la présentation et l'apparence de la vue. Vous aurez besoin de deux champs de saisie de texte et d'un bouton pour la soumission..

Ça devrait ressembler à ça:

    

Ouvrez maintenant votre activité principale et liez les champs de vue à votre activité. Vous devrez le faire à l'intérieur de votre onCreate () méthode, comme ceci:

 //… final EditText mBkTitle = (EditText) findViewById (R.id.title); final EditText mBkAuthor = (EditText) findViewById (R.id.author); Bouton bouton = (Bouton) findViewById (R.id.submit_button);

Pour finir Activité principale, vous devez mettre en place un onClickListener. Ce sera appelé chaque fois que le Soumettre bouton est enfoncé. Lorsque cela se produit, les détails saisis doivent être collectés et envoyés à l'activité suivante..

 button.setOnClickListener (nouvelle View.OnClickListener () @Override public void onClick (Afficher v) Livre Book = new Book (mBkTitle.getText (). toString (), mBkAuthor.getText (). to Intention intentionnelle = nouvelle intention (MainActivity.this, BookActivity.class); intent.putExtra ("Livre", livre); startActivity (intent) ();

Ici, vous ajoutez un onClickListener au Bouton exemple, vous avez récupéré de votre mise en page de l'activité. Ce code sera exécuté chaque fois que le Soumettre le bouton est cliqué. 

Notez que nous passons simplement le Livre exemple pour putExtra (). Comme nous le verrons plus tard, Parcelable s’occupe de la sérialisation des données du livre en chaîne afin que celles-ci puissent être transmises via Intent..

Maintenant que l’activité principale est terminée, nous devons créer notre BookActivity ainsi que la classe Book pour tenir des informations de livre.

Créer la classe de livre

Créons un Livre classe pour tenir des informations sur chaque livre.

public class Book implémente Parcelable // livre basics private String title; auteur de chaîne privé; 

Cette classe doit implémenter Colis. Cela permettra de transmettre les données de Activité principale à BookActivity.

Nous allons également ajouter des fonctions de lecture standard et un constructeur pour créer rapidement une instance de la classe..

 // constructeur principal public Book (titre de chaîne, auteur de chaîne) this.title = title; this.author = auteur;  // getters public String getTitle () return title;  public String getAuthor () return author; 

Écrire au colis

le writeToParcel méthode est où vous ajoutez toutes vos données de classe à la parcelle. Ceci est fait en préparation du transfert. Cette méthode recevra une instance de parcelle contenant un certain nombre de méthodes d'écriture que vous pouvez utiliser pour ajouter chaque champ à la parcelle. Attention: l'ordre dans lequel vous écrivez les données est important!

Voici comment vous le faites.

 // écrit les valeurs des objets sur la parcelle pour le stockage public void writeToParcel (Parcel dest, flags int) dest.writeString (title); dest.writeString (auteur); 

Lire les données du colis

Tout comme la méthode d'écriture gère l'écriture des données à transférer, le constructeur est utilisé pour lire les données transférées à partir du colis sérialisé. Cette méthode sera appelée sur l'activité destinataire pour collecter les données.

Voici à quoi cela devrait ressembler:

 livre public (parcelle) title = parcel.readString (); author = parcel.readString (); 

L’activité de réception recevra les données sous forme de chaîne, puis appellera le getParcelableExtra méthode pour démarrer le processus de collecte des données. Cela déclenchera le constructeur défini ci-dessus, qui désérialisera les données et créera un nouveau Livre exemple. 

Parcelable.Creator

Pour compléter votre classe Parcelable, vous devez créer un Parcelable.Creator par exemple et l'assigner à la CRÉATEUR champ. L'API Parcelable recherchera ce champ lorsqu'elle devra désérialiser une instance de votre classe qui a été transmise à un autre composant..

 public statique final Parcelable.Creator CREATOR = new Parcelable.Creator() @Override public Book createFromParcel (Colis, colis) retourne un nouveau livre (colis);  @Override public Book [] newArray (taille int.) Return new Book [0]; ;

Cela lie tout ensemble. Son travail est simple: il génère des instances de votre classe Parcelable à partir d’un parcelle en utilisant les données de colis fournies. Le créateur appelle le constructeur que vous avez défini ci-dessus en lui transmettant un parcelle objet, et le constructeur initialise les attributs de classe.

Si votre classe Parcelable aura des cours pour enfants, vous devrez prendre des précautions supplémentaires avec describeContents () méthode. Cela vous permettra d’identifier la classe enfant spécifique devant être créée par le Parcelable.Creator. Vous pouvez en savoir plus sur comment cela fonctionne sur Stack Overflow.

Activité du livre et mise en page

Maintenant, nous pouvons compléter notre application avec le livre Activity. Allez-y et créez une nouvelle activité vide appelée BookActivity. Faites en sorte que la mise en page ressemble à celle que j'ai ci-dessous.

    

dans le activity_book.xml, vous n'avez besoin que de deux Affichage widgets, qui seront utilisés pour montrer le titre et l'auteur des livres.

Maintenant, organisons notre activité. Votre activité devrait déjà ressembler à ceci:

package com.tutsplus.code.android.bookparcel; importer android.support.v7.app.AppCompatActivity; importer android.os.Bundle; Classe publique BookActivity étend AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_book); 

Dans cette activité, vous souhaitez recevoir les données transmises de votre activité principale et les afficher dans vos vues. Ainsi, vous récupérerez les instances de votre Affichage en utilisant l'identifiant du Affichage définir dans votre mise en page.

 TextView mBkTitle = (TextView) findViewById (R.id.bk_title); TextView mBkAuthor = (TextView) findViewById (R.id.bk_author);

Ensuite, bien sûr, vous appellerez getIntent () parce que vous allez récupérer des données dans cette activité. Les données que vous allez récupérer sont collectées à partir de la classe Book à l'aide de getParcelableExtra (). Ensuite, vous définissez les valeurs du TextViews aux données que vous avez collectées. Voici comment c'est fait.

 Intention intention = getIntent (); Book book = intent.getParcelableExtra ("Livre"); mBkTitle.setText ("Titre:" + book.getTitle ()); mBkAuthor.setText ("Auteur:" + book.getAuthor ());

Construisez votre application et lancez-la, et vous devriez voir la petite beauté que vous venez de construire.

Conclusion

Dans cet article, vous avez vu comment déplacer facilement des objets d'une activité à une autre. Vous n'avez plus besoin de récupérer séparément chaque champ de données que vous avez transmis à l'objet Intention et vous n'avez pas besoin de vous souvenir du nom sous lequel vous avez passé chaque champ. Non seulement cela, mais ce processus est plus rapide que la fonctionnalité de sérialisation de Java.

Dans ce didacticiel, vous avez appris à utiliser Parcelable pour transmettre des données d’une activité à une autre. Vous pouvez plonger plus profondément dans Parcelable en consultant la documentation officielle. 

En attendant, consultez quelques-uns de nos autres articles sur le développement d'applications Android.!