So übergeben Sie Daten zwischen Aktivitäten mit Android Parcelable

Einführung

Wir müssen oft Daten zwischen Aktivitäten einer Android-App übergeben. Ein einfacher Weg, dies zu tun, ist mit Intent.putExtra (), Wenn Sie jedoch viele strukturierte Daten übergeben müssen, ist Parcelable möglicherweise eine bessere Lösung. In diesem Beitrag zeige ich Ihnen, wie Sie mit Parcelable die Klassen für das Teilen zwischen Aktivitäten einfach serialisieren können.

Warum paketierbar?

Parcelable ist eine reine Android-Schnittstelle. Entwickler können damit eine Klasse serialisieren, sodass ihre Eigenschaften leicht von einer Aktivität auf eine andere übertragen werden können. Dies geschieht durch Lesen und Schreiben von Objekten aus Flurstücken, die abgeflachte Daten in Nachrichtencontainern enthalten können. 

Hauptaktivität und Layout erstellen

Unsere Hauptaktivität wird die Sammlung der Buchdetails abwickeln. Beginnen wir mit der Einrichtung unseres onCreate Methode.

Paket com.tutsplus.code.android.bookparcel; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity erweitert AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); //…

Als nächstes öffnen activity_main.xml um das Layout und das Aussehen der Ansicht festzulegen. Für die Übermittlung benötigen Sie zwei Texteingabefelder und eine Schaltfläche.

Es sollte so aussehen:

    

Öffnen Sie nun Ihre Hauptaktivität und verknüpfen Sie die Ansichtsfelder mit Ihrer Aktivität. Sie müssen es in Ihrem tun onCreate () Methode wie folgt:

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

Zum Abschluß Hauptaktivität, Sie müssen eine einrichten onClickListener. Dies wird immer dann aufgerufen, wenn die einreichen Taste wird gedrückt. In diesem Fall müssen die eingegebenen Daten gesammelt und an die nächste Aktivität gesendet werden.

 button.setOnClickListener (new View.OnClickListener () @Override public void onClick (View v) Buch buchen = neues Buch (mBkTitle.getText (). toString (), mBkAuthor.getText (). toString () = new Intent (MainActivity.this, BookActivity.class); intent.putExtra ("Book", Buch); startActivity (intent);;

Hier fügen Sie ein onClickListener zum Taste Instanz, die Sie aus Ihrem Aktivitätslayout abgerufen haben. Dieser Code wird immer dann ausgeführt, wenn einreichen Schaltfläche ist angeklickt. 

Beachten Sie, dass wir einfach das übergeben Buch Instanz zu putExtra (). Wie wir später sehen werden, kümmert sich Parcelable um die Serialisierung der Buchdaten in eine Zeichenfolge, damit sie über den Intent übergeben werden können.

Nun, da die Hauptaktivität abgeschlossen ist, müssen wir unsere erstellen BookActivity sowie die Book-Klasse zum Speichern von Buchinformationen.

Erstellen Sie die Buchklasse

Lass uns einen erstellen Buch Klasse für Informationen zu jedem Buch.

public class Book implementiert Parcelable // Buchgrundlagen private String title; privater String-Autor; 

Diese Klasse muss implementiert werden Paketierbar. Dies ermöglicht die Weitergabe der Daten von Hauptaktivität zu BookActivity.

Wir werden auch einige Standard-Getter-Funktionen und einen Konstruktor hinzufügen, um schnell eine Instanz der Klasse zu erstellen.

 // Hauptkonstruktor public Book (String-Titel, String-Autor) this.title = title; this.author = Autor;  // getters public String getTitle () return title;  public String getAuthor () return author; 

Schreiben Sie an das Paket

Das writeToParcel Bei dieser Methode fügen Sie alle Ihre Klassendaten zum Paket hinzu. Dies erfolgt in Vorbereitung auf die Übertragung. Diese Methode wird an eine Parcel-Instanz übergeben, die über eine Reihe von Schreibmethoden verfügt, mit denen Sie jedes Feld zur Parzelle hinzufügen können. Achtung: Die Reihenfolge, in der Sie die Daten schreiben, ist wichtig!

So machen Sie es.

 // schreibe Objektwerte in Parcel zum Speichern public void writeToParcel (Parcel dest, int flags) dest.writeString (title); dest.writeString (Autor); 

Daten aus dem Paket zurücklesen

Ebenso wie die Schreibmethode das Schreiben der zu übertragenden Daten übernimmt, werden die übertragenen Daten vom Konstruktor aus dem serialisierten Paket zurückgelesen. Diese Methode wird für die empfangende Aktivität zum Sammeln der Daten aufgerufen.

So sollte es aussehen:

 öffentliches Buch (Paketpaket) title = parcel.readString (); author = parcel.readString (); 

Die empfangende Aktivität erhält die Daten als Zeichenfolge und ruft dann die getParcelableExtra Methode, um den Datenerfassungsprozess zu starten. Dadurch wird der oben definierte Konstruktor ausgelöst, der die Daten deserialisiert und neue Daten erstellt Buch Beispiel. 

Parcelable.Creator

Um Ihre Parcelable-Klasse abzuschließen, müssen Sie eine Parcelable.Creator Instanz und ordnen Sie es dem zu SCHÖPFER Feld. Die Parcelable-API sucht nach diesem Feld, wenn eine Instanz Ihrer Klasse deserialisiert werden muss, die an eine andere Komponente übergeben wurde.

 public static final Parcelable.Creator CREATOR = new Parcelable.Creator() @Override public Book createFromParcel (Paketpaket) Neues Buch zurückgeben (Paket);  @Override public Book [] newArray (int size) return new Book [0]; ;

Das bindet alles zusammen. Ihre Aufgabe ist einfach: Sie generiert Instanzen Ihrer Parcelable-Klasse aus einem Paket Verwenden der bereitgestellten Paketdaten. Der Ersteller ruft den Konstruktor, den Sie oben definiert haben, an und übergeben ihn als a Paket object und der Konstruktor initialisiert die Klassenattribute.

Wenn Ihre Parcelable-Klasse über Kinderklassen verfügt, müssen Sie beim defineContents () Methode. Auf diese Weise können Sie die spezifische untergeordnete Klasse identifizieren, die von erstellt werden soll Parcelable.Creator. Sie können mehr darüber erfahren, wie dies beim Stack Overflow funktioniert.

Buchaktivität und Layout

Jetzt können wir unsere App mit dem Buch Activity ergänzen. Erstellen Sie eine neue leere Aktivität mit dem Namen BookActivity. Lass das Layout so aussehen, wie ich es unten habe.

    

In dem Activity_book.xml, du brauchst nur zwei Textvorschau Widgets, mit denen Titel und Autor der Bücher angezeigt werden.

Nun lass uns unsere Aktivität einrichten. Ihre Aktivität sollte bereits so aussehen:

Paket com.tutsplus.code.android.bookparcel; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class BookActivity erweitert AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_book); 

In dieser Aktivität möchten Sie die von Ihrer Hauptaktivität übergebenen Daten erhalten und in Ihren Ansichten anzeigen. So werden Sie die Instanzen von Ihrem abrufen Textvorschau mit der id der Textvorschau in Ihrem Layout festlegen.

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

Dann rufen Sie natürlich an getIntent () weil Sie Daten in dieser Aktivität abrufen. Die Daten, die Sie abrufen, werden mit der Klasse Book erfasst getParcelableExtra (). Als Nächstes legen Sie die Werte von fest TextViews auf die Daten, die Sie gesammelt haben. So wird es gemacht.

 Absicht Absicht = getIntent (); Buch buchen = intent.getParcelableExtra ("Buch"); mBkTitle.setText ("title:" + book.getTitle ()); mBkAuthor.setText ("Author:" + book.getAuthor ());

Erstellen Sie Ihre Anwendung und starten Sie sie, und Sie sollten die kleine Schönheit sehen, die Sie gerade gebaut haben.

Fazit

In diesem Beitrag haben Sie gesehen, wie Sie Objekte problemlos von einer Aktivität in eine andere verschieben können. Sie müssen nicht mehr jedes Datenfeld abrufen, das Sie an das Intent-Objekt übergeben haben, und Sie müssen sich nicht den Namen merken, unter dem Sie jedes Feld übergeben haben. Darüber hinaus ist dieser Prozess schneller als die Serialisierungsfunktion von Java.

In diesem Lernprogramm haben Sie gelernt, wie Sie Parcelable verwenden, um Daten von einer Aktivität an eine andere zu übergeben. Sie können tiefer in Parcelable eintauchen, indem Sie die offizielle Dokumentation überprüfen. 

In der Zwischenzeit finden Sie einige unserer anderen Beiträge zur Entwicklung von Android-Apps!