我无法让SharedPreferences工作

时间:2012-04-12 18:19:01

标签: java android sharedpreferences

我正在为Android制作应用程序,在Splash屏幕上我希望它在第一次启动应用程序时显示AlertDialog。这是我的代码:

    SharedPreferences savedInfo = getSharedPreferences("SavedInfo", MODE_PRIVATE);
    SharedPreferences.Editor infoEditor = savedInfo.edit();

        boolean firstLaunch = savedInfo.getBoolean("firstLaunch", true);

        final AlertDialog importDialog = new AlertDialog.Builder(SplashActivity.this).create();

        if (firstLaunch == true) {
            importDialog.setTitle(R.string.splash_import_title);
            importDialog.setMessage(getString(R.string.splash_import_text));
            importDialog.setIcon(android.R.drawable.ic_dialog_alert);
            importDialog.setButton(getString(R.string.splash_import_yes), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    //ALL FILE STUFF HERE
                    importDialog.dismiss();
                    startTimer();
                }
            });
            importDialog.setButton2(getString(R.string.splash_import_no), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    importDialog.dismiss();
                        startTimer();
                }
            });  
            importDialog.show();
            infoEditor.putBoolean("firstLaunch", false);
        } else {
            startTimer();
        }

问题是,每次都会向我显示对话框。即使我已经推出它。感谢您的时间和帮助,zeokila。

3 个答案:

答案 0 :(得分:1)

我相信你必须在infoEditor.commit()之后运行putBoolean。在您这样做之前,它实际上并不保存新的首选项。

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html

答案 1 :(得分:1)

你必须告诉你的编辑保存。添加infoEditor.commit();(同步)或infoEditor.apply();(异步)以保留您的值。

答案 2 :(得分:1)

infoEditor.commit()后似乎缺少

infoEditor.putBoolean("firstLaunch", false),因此永远不会保存新值。