2012-11-08 19 views
5

mam ten kod:SharedPreferences nie zapisuje wartość

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

ale zawsze jestem coraz zarejestrowany jako „false” kiedy ponownie uruchomić aplikację. Próbowałem go również zatwierdzić na onStop() i otrzymałem ten sam wynik. Widziałem tutaj inne tematy związane z tym problemem, ale żaden z nich nie miał takiego samego problemu jak ja.

Wszelkie pomysły?

Odpowiedz

19

Nie możesz tego zrobić:

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

trzeba uzyskać obiekt edytora, a następnie dokonać zmian:

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

dzięki. To jest SharedPreferences.Editor. Zadziałało. Ale czy możesz mi wyjaśnić, dlaczego? Może dlatego, że kiedy po prostu wzywam metody, może on wywoływać różne "obiekty"? –

+1

Tak, za każdym razem, gdy wywołasz '.edit()', resetuje obiekt edytora, dlatego gdy wywołasz go dla '.commit()', usuwa on wartość logiczną, którą w nim wstawiłeś. – cjk

+0

Możesz jednak wykonać 'settings.edit(). PutBoolean (" zarejestrowany ", true) .commit();' (o ile pamiętam) –

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

wykorzystanie tego

0

innych odpowiedzi są również poprawne.

Można również użyć tego

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

+0

To nie działa. Zobacz odpowiedź cjk, wyjaśnia całkiem dobrze, dlaczego! –