¿Cómo puedo pasar datos entre Actividades en la aplicación Android?

Tengo un escenario en el que, después de iniciar la sesión a través de una página de inicio de sesión, habrá un botón de salida en cada actividad.

Al hacer clic en salir, voy a pasar el id de sesión del usuario que ha iniciado la sesión para salir. ¿Puede alguien guiarme sobre cómo mantener el id de sesión disponible para todas las actividades?

Alguna alternativa a este caso

Solución

La forma más sencilla de hacerlo sería pasar el identificador de sesión a la actividad de cierre de sesión en el Intent que estás utilizando para iniciar la actividad:

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

Accede a esa intención en la siguiente actividad:

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

La docs de Intents tiene más información (mira la sección titulada "Extras").

Comentarios (12)

Pasar los extras de Intent es un buen enfoque, como señaló Erich.

Sin embargo, el objeto Application es otra forma, y a veces es más fácil cuando se trata del mismo estado a través de múltiples actividades (en lugar de tener que obtener/ponerlo en todas partes), u objetos más complejos que los primitivos y las cadenas.

Puedes extender la Aplicación, y entonces establecer/obtener lo que quieras allí y acceder a ello desde cualquier Actividad (en la misma aplicación) con getApplication().

También ten en cuenta que otros enfoques que puedes ver, como los estáticos, pueden ser problemáticos porque pueden conducir a fugas de memoria. La aplicación ayuda a resolver esto también.

Comentarios (6)

Intenta hacer lo siguiente:

Cree una clase simple de "ayuda" (fábrica para sus Intents), así:

import android.content.Intent;

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

Esta será la fábrica para todos tus Intents. Cada vez que necesites un nuevo Intent, crea un método de fábrica estático en IntentHelper. Para crear un nuevo Intent sólo debes decirlo así:

IntentHelper.createYourSpecialIntent(getIntent());

En tu actividad. Cuando quieras "guardar" algún dato en una "sesión" sólo tienes que usar lo siguiente:

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

Y envíe este Intent. En la Actividad de destino su campo estará disponible como:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Así que ahora podemos usar el Intent como la misma sesión de siempre (como en los servlets o JSP).

Comentarios (0)