2011-10-25 21 views
9

Ho un ID di sessione di accesso che è necessario utilizzare più attività. Come condivido questi dati comuni tra più attività? Attualmente sto passando i dati nell'intento ma non funziona correttamente. Per alcune attività, trasmetto altri dati e i dati comuni vengono persi.Come condividere gli stessi dati tra più attività

+1

ciò che si desidera passare esattamente? E inserisci qui il tuo codice –

+0

Puoi condividere i dati tramite intent o puoi fare 1 classe globale e accedere ai dati attraverso questo..inviare i dati via intent è molto semplice .. devi solo mettere i tuoi dati in intent.putExtra (tipo di dati adatto) metodo e condividerlo su più attività ... – android

+0

Ho accesso nella mia applicazione in che otterrò sessionid ho bisogno di usarlo in tutte le attività che mai dopo l'accesso anche io ho bisogno di passare alcuni altri dati alle attività successive (incluso sessionid). Ora sto provando con intento ma a volte devia verso altre attività. – Harish

risposta

1

Un modo per farlo è quello di estendere la Application, e quindi chiamare getApplication nelle vostre attività. This site ha alcuni esempi.

+0

soluzione non valida, ma è stata scritta molto tempo fa .. quindi spingo l'autore a migliorarlo;) – Ewoks

10

uso comune preferenze come questo:

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

È possibile recuperare queste informazioni in tutta l'applicazione in questo modo:

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

Dovresti usare intents quando vuoi iniziare un'altra attività dalla tua attività corrente ... anche se l'attività del bambino è totall y dipende da dati provenienti da attività di genitore ... uso intenti

1

Non so che cosa esattamente il codice è si sta trattando, ma hai provato come questo

nella vostra attività in corso, creare un intento

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

quindi nell'altra attività, recuperare quei valori.

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

classe Singleton Usa per la condivisione.

codice di esempio

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

in altre attività/Class per impostare il valore come:

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

Il modo in cui lo faccio è che estendo una classe mondiale da attività, e quindi estendere tutto attività reali con le quali l'utente interagirà. È così che ho imparato a farlo con alcuni libri "learn to code for android" che ho comprato.

Questo è praticamente come utilizzare la classe Application.

+0

Che dire della perdita di memoria? come condividi i dati? – Nico

2

Dopo aver letto il documento su SharedPreferences e la discussione quasi su flamewar su Singleton vs Application in android.

concludo: Si prega di smentire alcuna conclusione

  • SharedPreferences: Buono se si prevede di mantenere solo i primitivi, e facile da diverse partite.
  • Parcelable: una soluzione di basso livello, con molto codice boilerplate, è possibile utilizzare in Extras
  • Serializable: se non si desidera disturbare con Parcelable. Vedi this
  • Singleton: La mia scelta. Semplice, veloce e senza caldaia. Il mio contributo è usare una mappa all'interno per flessibilità.

    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); 
        } 
    } 
    
  • Applicazione: Quasi la stessa di Singleton, ma per qualche ragione nascondere-a-me, facilitare il testing e il modo normalizzata più androide di fare le cose.

0

È possibile memorizzarlo in SharedPreferences o nella classe Singleton. dove suggerirei di usare la classe singleton.

  • SharedPreferences:

scrivere il valore

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

Leggi Valore

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

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

Scrivi Singleton

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

Leggi dal Singleton

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