2011-10-25 14 views
9

Tengo un ID de sesión de sesión que necesita usar varias actividades. ¿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.Cómo compartir los mismos datos entre múltiples actividades

+1

lo que desea pasar exactamente? Y publique su código aquí –

+0

Puede compartir datos a través de un intento o puede hacer 1 clase global y acceder a los datos a través de ese ... enviar datos a través de la intención es muy simple ... simplemente debe poner sus datos en intent.putExtra (tipo de datos adecuado)) método y compartirlo en múltiples actividades ... – android

+0

Tengo Iniciar sesión en mi aplicación en la que obtendré sessionid Necesito usarla en todas las actividades que se produzcan después de iniciar sesión. También necesito pasar otros datos a las próximas actividades. (incluido el sessionid). Ahora estoy intentando con intención, pero a veces se desvía a otras actividades. – Harish

Respuesta

1

Una forma de hacerlo es extender Application, y luego llamar a getApplication en sus actividades. This site tiene algunos ejemplos.

+0

mala solución, pero fue escrito hace mucho tiempo ... así que empujo al autor para mejorarlo;) – Ewoks

10

uso compartido preferencias como este:

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

Puede recuperar esta información a través de su aplicación como esta:

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

Debería usar intents cuando quiera comenzar otra actividad de su actividad actual ... también si la actividad del niño es totall Y depende de los datos de actividad de los padres ... las intenciones de uso

1

I no sabe qué es exactamente lo que el código se está tratando con, pero ¿ha tratado como éste

en su actividad actual, crear una intención

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

luego en la otra actividad, recupere esos valores.

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

Usa la clase Singleton para compartir.

código de ejemplo

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; 
0

La forma en que lo hago es que me extiendo una clase global de la actividad, y luego extender todo 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é.

Esto es muy parecido a usar la clase de Aplicación.

+0

¿Qué pasa con la pérdida de memoria? ¿cómo compartes datos? – Nico

2

Después de leer el documento acerca de SharedPreferences y el debate casi a la guerra de llama sobre Singleton vs Application in android.

Mi conclusión: Por favor desmentir ninguna conclusión

  • SharedPreferences: Bueno si va a mantener sólo primitivas, y fácil de mantener diferentes parcelas.
  • parcelable: Una solución de bajo nivel, con una gran cantidad de código repetitivo, se puede utilizar en Extras
  • Serializable: Si no quiere preocuparse por parcelable. Ver this
  • 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<String, Object> 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<String, Object>(); 
        } 
    
        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 ocultar-a-mí, facilitar la prueba y forma estandarizada más androide de hacer las cosas.

0

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

  • SharedPreferences:

valor de escritura

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

leer el valor

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

    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 al Singleton

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

Leer de Singleton

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