6

私はこのコードを持っています:

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

しかし、アプリを再起動すると、常に「false」として登録されます。私もそれをコミットしようとしましたonStop()が、同じ結果が得られました。私はここでこの問題に関する他のトピックを見てきましたが、それらのどれも私と同じ問題を抱えていませんでした。

何か案は?

4

3 に答える 3

20

You can't do this:

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

You need to get the editor object, then make the changes:

Editor editor = settings.edit();
editor.putBoolean(...);
editor.commit();
于 2012-11-08T12:00:29.440 に答える
2
SharedPreferences prefs = PreferenceManager  
                        .getDefaultSharedPreferences(LoginActivity.this);  
                Editor edit = prefs.edit();  
                edit.putBoolean("registered", true);
                edit.commit(); 

これを使って

于 2012-11-08T12:03:44.300 に答える
0

他の答えも正しいです。

これも使えます

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

于 2012-11-08T12:07:13.230 に答える