Android: Daten zwischen den Activitys austauschen

Möchte man Daten zwischen 2 Activitys austauschen so kann man diese Daten in einer Intent speichern und später wieder aus dieser laden.

Wie dieses genau geschieht möchte ich in diesem Tutorial beschreiben.

Ziel

Ziel soll es sein das Daten zwischen 2 Activitys ausgetauscht werden können. Diese Daten sind zuerst einfache java.lang.String Daten.

Aufbau des Projektes

Als IDE verwende ich Android Studio und ein kleines Projekt welches nur 2 Activitys besitzt.

Dateien für dieses Beispiel.

 

Die „MainActivity“ wird angezeigt wenn die App gestartet wird (dieses wird in der AndroidManifest.xml gesteuert) und soll im späteren Verlauf die Daten aus der InputActivity anzeigen.

Der Quellcode

MainActivity

Die MainActivity enthält die TextView Komponenten für

  • Vorname, und
  • Name

Des Weiteren den Button „Eingeben“.

Der Aufruf der InputActivity wird im OnClick Event der Schaltfläche „Eingeben“ realisiert.

Die Konstante INPUT_ACTIVITY_RESULT ist ein beliebiger, primitiver, Integer Wert.

InputActivity

Die InputActivity enthält die Komponenten um den Vornamen und Namen einzugeben (EditText) und den Button „Absenden“ um diese Daten an die Main Activity zu senden.

Die Methode „onClick“ ruf nur die Methode „finish“ der InputActivity auf, diese Methode muss nun wie folgt überschrieben werden :

Wichtig ist hier das „RESULT_OK“ als Result gesetzt wird, denn sonst wird immer ein RESULT_CANCELD gesendet.

Die Daten für die MainActivity werden in die Intent mit der Methode „putExtra“ gepackt. Die Methode „putExtra“ kann diverse Datentypen annehmen.
Für dieses Beispiel reicht es aus das die Daten im java.lang.String übergeben werden.

Nachdem die Daten in der Intent abgelegt wurden kann zur MainActivity zurück gekehrt werden. Dieses geschieht indem man mit „super.finish();“.

Verarbeiten der Daten in der MainActivity

Nachdem in der InputActivity die Daten eingegeben und an die MainActivity gesendet wurden können diese nun verarbeitet werden. Dazu überschreiben wir die Methode „onActivityResult“ wiefolgt:

Es wird zuerst geprüft ob der RequestCode von der zuvor gestarteten InputActivity stammt, dieses könnte in diesem Beispiel entfallen da hier nur eine Activity gestartet wird.
Als nächstes wird der ResultCode geprüft, sollte der Benutzer die InputActivitiy über den ZurückButton des Android Gerätes verlassen haben so wird ein RESULT_CANCELD gesendet, d.h. nur bei RESULT_OK empfangen und verarbeiten wir die Daten.

Die Daten bekommt man wiederum aus der Intent mit der Methode „data.getStringExtra“ da wir diese als String abgelegt haben.

Senden und Empfangen von Objekten

Es wurde bisher „nur“ einfache Datentypen verwendet, möchte man jedoch komplexe Objekte zwischen zwei Activitys austauschen so kann man sich mit dem JSON Format und der Google Bibliothek GSON behelfen. Diese Bibliothek macht es einfach Objekte von und nach JSON zu konvertieren. Schreiben wir also das Projekt etwas um.

Einbinden der Bibliothek

Die Bibliothek wird im Android Studioprojekt in der Datei „build.gradle (Module:app)“ eingebunden. Dazu wird folgender Import hinzugefügt:

Es muss nun noch synchronisiert werden und dann kann diese Bibliothek schon verwendet werden.

Person Objekt

Für dieses Beispiel verwende ich ein einfaches Person Objekt welches folgende Attribute besitzt:

  • Vorname
  • Name

Die Klasse dazu sieht folgendermaßen aus:

Sicherlich würde man hier noch die Methoden toString, equals und hashCode überschreiben aber dieses erspare ich in diesem Beispiel.

Methode Finish in InputActivity

Die Methode Finish wird wie folgt angepasst

Es wird zuerst ein neues Person Objekt erstellt und danach die Werte aus den Eingabefeldern zugewiesen. Dieses befüllte Person Objekt wird dann mit Gson nach JSON konvertiert.

Da das JSON Format ein Stringformat ist kann dieses nun einfach als String dem Intent wie zuvor mit der Methode putExtra hinzugefügt werden. Als KEY verwende ich hier jedoch „person“.

Methode onActivityResult in MainActivity

Nachdem nun ein JSON versendet wird muss dieses in der MainActivity wieder in das Person Objekt zurück konvertiert werden. Auch dazu verwendet man die selbe Bibliothek.

Hierzu wird der JSON String aus der Intent mit der Methode getStringExtra geladen (und dem passenden KEY) zusätzlich wird die Klasse genannt in welche dieser String konvertiert werden soll.

Als Ergebnis bekommt man wieder das Person Objekt, die Werte bekommt man wie gewohnt über die zuvor veröffentlichten Getter Methoden.

Download

Hier nun der Download des Android Studio Projektes :

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.