Cómo compartir los mismos datos entre múltiples actividades

Tengo un ID de sesión de inicio de sesión que varias actividades deben usar. ¿Cómo comparto esta información común entre múltiples actividades? Actualmente, estoy pasando los datos en el Intent pero no funciona correctamente. Para algunas actividades, paso otros datos, y los datos comunes se pierden.

Una forma de hacerlo es extender la Application y luego llamar a getApplication en sus actividades. Este sitio tiene algunos ejemplos.

Use preferencias compartidas como esta:

 SharedPreferences myprefs= this.getSharedPreferences("user", MODE_WORLD_READABLE); myprefs.edit().putString("session_id", value).commit(); 

Puede recuperar esta información en su aplicación de esta manera:

 SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE); String session_id= myprefs.getString("session_id", null); 

Debería utilizar intents cuando quiera comenzar otra actividad de su actividad actual … también si la actividad del niño depende totalmente de los datos de la actividad de los padres … use intents

  • Use la clase de Aplicación para compartir datos comunes.
  • Use Prefrences Compartidas o bases de datos o algún tipo de almacenamiento persistente.

Usa la clase Singleton para compartir.

Código de muestra

 public class Category { private static final Category INSTANCE = new Category(); public String categoryName = ""; public int categoryColor = 0; public boolean status = false; // Private constructor prevents instantiation from other classes private Category() {} public static Category getInstance() { return INSTANCE; } } 

en otra actividad / clase para establecer el valor como:

 Category cat; cat=Category.getInstance(); cat.categoryName="some name"; cat.status=ture; for getting the values every where you want in your application. Category cat; cat=Category.getInstance(); String sq=cat.categoryName; boolean stat=cat.status; 

Debe usar las preferencias compartidas como se detalla a continuación, http://developer.android.com/guide/topics/data/data-storage.html#pref

Después de leer el documento sobre las Preferencias Compartidas y la discusión casi sobre la guerra de llama sobre Singleton vs Aplicación en Android .

Concluyo: Por favor refuten cualquier conclusión

  • SharedPreferences: Bueno si planeas mantener solo primitivos, y fácil de mantener diferentes plots.
  • Parcelable: una solución de bajo nivel, con muchos códigos repetitivos, que puede usar en Extras
  • Serializable: si no quieres molestarte con Parcelable. Mira esto
  • Singleton: Mi elección. Simple, rápido y sin repetición. Mi contribución es usar un Mapa dentro para flexibilidad.

     public class Config { private static Config instance; private HashMap map; /*Keep doc about keys and its purpose if needed*/ public static final String TOKEN = "token"; public static final String SESSION = "sessionId"; /** A bean with A LOT of useful user info */ public static final String USER_BEAN = "userBean"; private Config() { map = new HashMap(); } public static final Config getInstance() { if (instance == null) { instance = new Config(); } return instance; } public void setKey(String key, Object value) { map.put(key, value); } public Object getKey(String key) { return map.get(key); } } 
  • Aplicación: casi lo mismo que singleton, pero por alguna razón oculta, facilitar las pruebas y una forma más estandarizada de Android de hacer las cosas.

No sé exactamente con qué código está tratando, pero lo ha intentado así

en tu actividad actual, crea una intención

 Intent i = new Intent(getApplicationContext(), ActivityB.class); i.putExtra(key, value); startActivity(i); 

luego en la otra actividad, recupera esos valores.

 Bundle extras = getIntent().getExtras(); if(extras !=null) { String value = extras.getString(key); } 

La forma en que lo hago es que extiendo una clase global desde Activity, y luego extiendo todas las actividades reales con las que el usuario interactuará desde allí. Así es como aprendí a hacerlo con algunos libros de “aprender a codificar para Android” que compré.

Sin embargo, esto es más o menos como usar la clase Application.

Puede almacenarlo en SharedPreferences o en Singleton class. donde sugeriría usar clase singleton.

  • Preferencias compartidas :

Escribir valor

 SharedPreferences mPref= this.getSharedPreferences("session", MODE_WORLD_READABLE); mPref.edit().putString("session_id", your_session_value).commit(); 

Leer valor

 SharedPreferences mPref= getSharedPreferences("session", MODE_WORLD_READABLE); String sSession_id= mPref.getString("session_id", null); 
  • Clase Singleton

     public class Session { private static Session session = null; private String mSessionId; private Session() { } public static Session getInstance() { if (session == null) { session = new Session(); } return session; } public String getSessionId() { return mSessionId; } public void setSessionId(String pSessionId) { this.mSessionId = pSessionId; } } 

Escribir a Singleton

 Session mSession = Session.getInstance(); mSession.setSessionId("your_session_id"); 

Leer desde singleton

 Session mSession = Session.getInstance(); String mSessionId = mSession.getSessionId();