Android 共享首选项不能正确保存

标签 android sharedpreferences android-sharedpreferences

我正在尝试使用 Android 共享首选项来保存某些应用程序值 这是我的 onCreate 代码:

protected void onCreate(Bundle savedInstanceState) {

    SharedPreferences preferences = getSharedPreferences("MyPref", MODE_PRIVATE);
    boolean firstLaunch = preferences.getBoolean("firstlaunch", true);

    System.out.println("FIRST LAUNCH? " + firstLaunch);

    if(firstLaunch == true){
        SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit();
        editor.putString("language", "en");
        editor.putInt("theme", R.style.Default);
        editor.putBoolean("firstLaunch", false);
        editor.commit();
        System.out.println("FIRST LAUNCH:" + preferences.getBoolean("firstLaunch", true));
    }

当我重新启动应用程序时,firstLaunch 是否仍然为真?这是为什么?

最佳答案

您有一个案例问题。 firstLaunchfirstLaunch

为避免此类问题,您应该使用静态成员。

private static final String KEY_PREFS_NAME = "myPrefs";
private static final String KEY_FIRST_LAUNCH = "firstLaunch";

protected void onCreate(Bundle savedInstanceState) {

SharedPreferences preferences = getSharedPreferences(KEY_PREFS_NAME, MODE_PRIVATE);
boolean firstLaunch = preferences.getBoolean(KEY_FIRST_LAUNCH, true);

System.out.println("FIRST LAUNCH? " + firstLaunch);

if(firstLaunch == true){
    SharedPreferences.Editor editor = getSharedPreferences(KEY_PREFS_NAME, MODE_PRIVATE).edit();
    editor.putString("language", "en");
    editor.putInt("theme", R.style.Default);
    editor.putBoolean(KEY_FIRST_LAUNCH, false);
    editor.commit();
    System.out.println("FIRST LAUNCH:" + preferences.getBoolean(KEY_FIRST_LAUNCH, true));
}

关于Android 共享首选项不能正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621783/

相关文章:

android - 收到 C2DM 推送通知时更改 Activity 行为

java - 如何使用 SharedPreferences 保存 SparseBooleanArray?或者还有其他选择吗?

java - 为什么 EditTextPreference setText ("string") 仅在启动时在内部工作?我试图在用户输入空字符串时设置一个值

android - 是否缓存了 SharedPreference 实例? (通过 PreferenceManager.getDefaultSharedPreferences())

java - 如何仅更改共享首选项中存储的 Json 对象中的一个值

java - 如何导入 javax.annotation.Nullable?

android - 关于RecyclerViews能力的讨论

android: setcontentview 禁用 onClickListeners

flutter 一次介绍屏幕?

java - 使用 SharedPreferences 获得离线高分 - Android (java)