Wie übertrage ich Daten zwischen Activities in einer Android-Anwendung?

Ich habe ein Szenario, in dem nach der Anmeldung über eine Anmeldeseite eine Abmelde-Schaltfläche auf jeder Aktivität vorhanden ist.

Wenn ich auf "Abmelden" klicke, übergebe ich die "Sitzungs-ID" des angemeldeten Benutzers, um mich abzumelden. Kann mir jemand sagen, wie ich die "Sitzungs-ID" für alle "Aktivitäten" verfügbar halten kann?

Gibt es eine Alternative für diesen Fall?

Lösung

Der einfachste Weg, dies zu tun, ist die Übergabe der Sitzungs-ID an die Abmeldeaktivität in dem "Intent", mit dem Sie die Aktivität starten:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

Greifen Sie bei der nächsten Aktivität auf diesen Intent zu:

String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");

Die docs für Absichten enthalten weitere Informationen (siehe den Abschnitt "Extras").

Kommentare (12)

Die Übergabe von Intent-Extras ist ein guter Ansatz, wie Erich bemerkte.

Das Application-Objekt ist jedoch eine andere Möglichkeit, und es ist manchmal einfacher, wenn man mit demselben Zustand über mehrere Aktivitäten hinweg zu tun hat (im Gegensatz dazu, dass man ihn überall abrufen/einfügen muss), oder mit Objekten, die komplexer sind als Primitive und Strings.

Sie können Application erweitern und dann dort setzen/holen, was immer Sie wollen, und von jeder Activity (in derselben Anwendung) mit getApplication() darauf zugreifen.

Denken Sie auch daran, dass andere Ansätze wie Statics problematisch sein können, weil sie zu Speicherlecks führen können. Application hilft auch hier bei der Lösung.

Kommentare (6)

Versuchen Sie, Folgendes zu tun:

Erstellen Sie eine einfache "helper" Klasse (Fabrik für Ihre Intents), wie diese:

import android.content.Intent;

public class IntentHelper {
    public static final Intent createYourSpecialIntent(Intent src) {
          return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
    }
}

Dies wird die Fabrik für alle Ihre Intents sein. Jedes Mal, wenn Sie ein neues Intent benötigen, erstellen Sie eine statische Fabrikmethode im IntentHelper. Um ein neues Intent zu erstellen, sollten Sie es einfach so sagen:

IntentHelper.createYourSpecialIntent(getIntent());

In Ihrer Aktivität. Wenn Sie Daten in einer Sitzung speichern wollen, verwenden Sie einfach die folgenden Zeilen:

IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);

Und senden Sie diesen Intent. In der Zielaktivität wird Ihr Feld als verfügbar sein:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Jetzt können wir Intent wie eine alte Sitzung verwenden (wie in Servlets oder JSP).

Kommentare (0)