2013-03-03 12 views
8

non so che cosa fare con esso piùApp continua a dimenticarsi sharedpreferences al riavvio

sembra funzionare bene con Android 3.0 e superiori, ma su Android 2.3.3 ogni volta che lanciare l'applicazione è chiedendo di nuovo il nome utente/password.

Sto utilizzando le preferenze condivise.

Ecco come li risparmio preferenze:

 SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", MODE_PRIVATE); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("username", username).commit(); 
     editor.putString("password", password).commit(); 

Ed ecco come ho letto loro:

SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", Context.MODE_PRIVATE); 
    String username = preferences.getString("username", ""); 
    String password = preferences.getString("password", ""); 

Ho anche cercato di salvare le preferenze utilizzando questo codice:

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext()); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("username", username).commit(); 
     editor.putString("password", password).commit(); 

E li leggo con questo codice:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext()); 
    String username = preferences.getString("username", ""); 
    String password = preferences.getString("password", ""); 

Ma non funziona neanche.

Il problema è prima di riavviare l'applicazione. Posso vedere che sono ancora lì. Tuttavia, non appena eseguo il riavvio, finisco per ottenere "" (stringa vuota) per il nome utente e "" per la password.

Tutte le idee sarebbe molto apprezzato

risposta

0

Non so esattamente cosa sia successo, ma dopo che ho riavviato il problema dell'emulatore è sparito.

Spiacente di sprecare il vostro tempo

+0

Lo stesso problema qui ed è andato dopo il riavvio proprio come il tuo. Veramente strano… – Victor

1

Prova questo:

SharedPreferences preferences = context.getSharedPreferences("YOUR_TAG", 0); 
String username = preferences.getString("username", ""); 
String password = preferences.getString("password", ""); 


    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putString("username", username).commit(); 
    editor.putString("password", password).commit(); 

cui contesto è il contesto della vostra applicazione:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


     context = this; 
+0

Ciao, vi ringrazio molto per il tuo commento. Sto facendo la stessa cosa nel mio primo esempio, ma temo che non funzioni –

+0

prova con la tua attività invece di MyApplication. – Gyonder

+0

Stavo chiamando getApplicationContext() invece di passare il contesto dall'attività. –

2
public class MyApplication extends Application { 
    private static MyApplication instance; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d(TAG, "onCreate() called"); 
    } 

    public MyApplication() { 
     super(); 
     Log.d(TAG, "Constructor called"); 
     instance = this; 
    } 


    public static MyApplication getApplication() { 
     if (instance == null) { 
      instance = new MyApplication(); 
     } 
     return instance; 
    } 
} 

e di utilizzo:

MyApplication.getApplication().getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE) 
+0

L'esempio non salva la 'nuova MyApplication' in istanza prima di tornare in modo che la memorizzazione nella cache non avvenga mai. – mikebabcock

+0

Grazie, ci provo io –

+0

risolto il problema indicato da mikebabcock. Grazie! – agamov

Problemi correlati