Comment passer des données entre des activités dans une application Android ?

J'ai un scénario où, après s'être connecté via une page de connexion, il y aura un bouton de déconnexion sur chaque activité.

En cliquant sur le bouton "Déconnexion", je transmettrai l'identifiant de session de l'utilisateur connecté à la déconnexion. Quelqu'un peut-il me guider sur la façon de garder l'identifiant de session disponible pour toutes les activités ?

Une alternative à ce cas

Solution

La façon la plus simple de le faire serait de passer l'identifiant de session à l'activité de déconnexion dans le Intent que vous utilisez pour démarrer l'activité :

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

Accédez à cette intention lors de l'activité suivante :

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

La [docs][1] des intentions contient plus d'informations (consultez la section intitulée "Extras").

[1] : http://developer.android.com/guide/topics/intents/intents-filters.html

Commentaires (12)

Passer les extras [Intent][1] est une bonne approche comme l'a noté Erich.

L'objet [Application][2] est une autre façon de procéder, qui est parfois plus facile lorsqu'il s'agit de gérer le même état dans plusieurs activités (plutôt que de devoir le récupérer ou le placer partout), ou d'objets plus complexes que les primitives et les chaînes de caractères.

Vous pouvez étendre Application, puis définir/obtenir ce que vous voulez et y accéder depuis n'importe quelle activité (dans la même application) avec [getApplication()][3].

Gardez également à l'esprit que d'autres approches que vous pourriez voir, comme les statiques, peuvent être problématiques car elles [peuvent entraîner des fuites de mémoire][4]. L'application permet de résoudre ce problème également.

[1] : http://developer.android.com/reference/android/content/Intent.html [2] : http://developer.android.com/reference/android/app/Application.html [3] : http://developer.android.com/reference/android/app/Activity.html#getApplication%28%29 [4] : http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

Commentaires (6)

Essayez de faire ce qui suit :

Créez une simple classe "helper" (fabrique pour vos Intents), comme ceci :

import android.content.Intent;

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

Ce sera la fabrique de tous vos Intents. Chaque fois que vous avez besoin d'un nouvel Intent, créez une méthode de fabrique statique dans IntentHelper. Pour créer un nouvel Intent, il suffit de le dire comme ceci :

IntentHelper.createYourSpecialIntent(getIntent());

Dans votre activité. Pour "sauvegarder" des données dans une "session", il suffit d'utiliser la formule suivante :

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

Et envoyez cette intention. Dans l'activité cible, votre champ sera disponible comme suit :

getIntent().getStringExtra("YOUR_FIELD_NAME");

Maintenant, nous pouvons utiliser l'Intent comme la même vieille session (comme dans les servlets ou [JSP][1]).

[1] : http://en.wikipedia.org/wiki/JavaServer_Pages

Commentaires (0)