Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Android: Daten zwischen den Activitys austauschen

Posted on 30. Dezember 20163. Mai 2023 by Stefan Draeger

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
  • Aufbau des Projektes
  • Der Quellcode
    • MainActivity
    • InputActivity
    • Verarbeiten der Daten in der MainActivity
  • Senden und Empfangen von Objekten
    • Einbinden der Bibliothek
    • Person Objekt
    • Methode Finish in InputActivity
    • Methode onActivityResult in MainActivity
  • Download

Ziel

Ziel soll es sein, dass 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.

Button inputBtn = (Button) findViewById(R.id.inputBtn);
inputBtn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
     Intent intent = new Intent(getApplicationContext(), InputActivity.class);
     startActivityForResult(intent, INPUT_ACTIVITY_RESULT);
  }
});

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.

Button sendBtn = (Button) findViewById(R.id.sendBtn);
sendBtn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
     finish();
   }
});

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

@Override
public void finish() {
  EditText vornameEditText = (EditText) findViewById(R.id.vornameEditText);
  EditText nameEditText = (EditText) findViewById(R.id.nameEditText);

  Intent data = new Intent();
  data.putExtra("vorname", vornameEditText.getText().toString());
  data.putExtra("name", nameEditText.getText().toString());
  setResult(RESULT_OK, data);
  super.finish();
}

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ückgekehrt 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“ wie folgt:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == INPUT_ACTIVITY_RESULT) {
     if (resultCode == RESULT_OK) {
        String vorname = data.getStringExtra("vorname");
        String name = data.getStringExtra("name");

        TextView vornameTextView = (TextView) findViewById(R.id.vornameTextView);
        vornameTextView.setText(vorname);

        TextView nameTextView = (TextView) findViewById(R.id.nameTextView);
        nameTextView.setText(name);
     }
  }
}

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:

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'

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:

public class Person {

    private String vorname;

    private String name;

    public String getVorname() { return vorname; }

    public void setVorname(String vorname) { this.vorname = vorname; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }
}

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

Intent data = new Intent();

Person person = new Person();
person.setName(nameEditText.getText().toString());
person.setVorname(vornameEditText.getText().toString());

data.putExtra("person", new Gson().toJson(person));

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.

{"name":"Draeger","vorname":"Stefan"}

Da das JSON Format ein Stringformat ist kann dieses nun einfach als String dem Intent wie zuvor mit der Methode putExtra hinzugefügt worden. 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ückkonvertiert werden. Auch dazu verwendet man dieselbe Bibliothek.

Person person = new Gson().fromJson(data.getStringExtra("person"), Person.class);

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:

Android, Daten zwischen Activitys austauschen, Beispiel ProjektHerunterladen

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}