2012-11-08 16 views
5

Ich habe diesen Code:SharedPreferences speichert nicht Wert

public class Register extends Activity { 

    private LinearLayout layout; 
    private TextView debug; 
    public static final String USER_CONFIG = "UserConfigs"; 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.register); 

     SharedPreferences settings = getSharedPreferences(USER_CONFIG, MODE_PRIVATE); 
     boolean registered = settings.getBoolean("registered", false); 

     layout = (LinearLayout) findViewById(R.id.layoutRegister); 

     if (!registered) { 
      debug = new TextView(this); 
      debug.setText("You have to register"); 
      layout.addView (debug); 

      //TO DO user registration 

      settings.edit().putBoolean("registered", true); 
      settings.edit().commit(); 
     } else { 
      debug = new TextView(this); 
      debug.setText("You have already registered"); 
      layout.addView (debug); 
      //TO DO skip to next screen 
     } 
    } 
} 

Aber ich bin immer als „falsch“ getting registriert, wenn ich meine Anwendung neu starten. Ich habe versucht, es auch auf onStop() zu begehen und habe das gleiche Ergebnis. Ich habe andere Themen mit diesem Problem hier gesehen, aber keiner von ihnen hatte das gleiche Problem wie ich.

Irgendwelche Ideen?

Antwort

19

Sie können dies nicht tun:

settings.edit().putBoolean("registered", true); 
settings.edit().commit(); 

Sie müssen den Editor-Objekt erhalten, dann die Änderungen vornehmen:

Editor editor = settings.edit(); 
editor.putBoolean(...); 
editor.commit(); 
+0

Vielen Dank. Es ist SharedPreferences.Editor. Es funktionierte. Aber kannst du mir erklären warum? Vielleicht, weil, wenn ich nur die Methoden anrufe, er verschiedene "Objekte" aufrufen kann? –

+1

Ja, jedes Mal, wenn Sie '.edit()' aufrufen, wird das Editor-Objekt zurückgesetzt, und wenn Sie es für '.commit()' aufrufen, löscht es den Booleschen Wert, den Sie hineingelegt haben. – cjk

+0

Sie können jedoch 'settings.edit(). PutBoolean (" registriert ", wahr). Commit();' (so weit ich mich erinnern kann) –

2
SharedPreferences prefs = PreferenceManager 
         .getDefaultSharedPreferences(LoginActivity.this); 
       Editor edit = prefs.edit(); 
       edit.putBoolean("registered", true); 
       edit.commit(); 

Verwendung dieses

0

Die anderen Antworten sind auch richtig.

können Sie auch diese verwenden

settings.edit().putBoolean("registered", true).commit();

+0

Das scheint nicht zu funktionieren. Siehe die Antwort von cjk, er erklärt ziemlich gut warum! –