Hoe geef ik gegevens door tussen activiteiten in een Android applicatie?

Ik heb een scenario waar, na het inloggen via een login pagina, er een afmeld knop komt op elke activiteit.

Als ik op uitloggen klik, geef ik het sessie id van de ingelogde gebruiker door om uit te loggen. Kan iemand mij vertellen hoe ik de sessie id beschikbaar kan houden voor alle activiteiten?

Een alternatief voor dit geval

Oplossing

De makkelijkste manier om dit te doen zou zijn om de sessie id door te geven aan de afmeld activiteit in de Intent die je gebruikt om de activiteit te starten:

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

Krijg toegang tot die intentie bij de volgende activiteit:

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

De docs voor Intents heeft meer informatie (kijk naar de sectie met de titel "Extras").

Commentaren (12)

Het passeren van Intent extra's is een goede aanpak zoals Erich opmerkte.

Het Applicatie object is echter een andere manier, en het is soms gemakkelijker wanneer je te maken hebt met dezelfde staat over meerdere activiteiten (in tegenstelling tot het overal moeten halen/zetten), of objecten die complexer zijn dan primitieven en Strings.

Je kunt Applicatie uitbreiden, en dan daar instellen/winnen wat je wilt en het benaderen vanuit elke Activiteit (in dezelfde applicatie) met getApplication().

Bedenk ook dat andere benaderingen die je zou kunnen zien, zoals statics, problematisch kunnen zijn omdat ze kunnen leiden tot geheugenlekken. Applicatie helpt ook dit op te lossen.

Commentaren (6)

Probeer het volgende te doen:

Maak een eenvoudige "helper" klasse (fabriek voor je Intents), zoals dit:

import android.content.Intent;

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

Dit zal de fabriek zijn voor al je Intents. Elke keer dat je een nieuwe Intent nodig hebt, maak je een statische fabrieksmethode in IntentHelper. Om een nieuwe Intent te maken moet je het gewoon zo zeggen:

IntentHelper.createYourSpecialIntent(getIntent());

In je activiteit. Wanneer je gegevens wilt "opslaan" in een "sessie" gebruik dan het volgende:

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

En verstuur deze Intentie. In de doelactiviteit zal je veld beschikbaar zijn als:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Dus nu kunnen we Intent gebruiken als dezelfde oude sessie (zoals in servlets of JSP).

Commentaren (0)