【问题标题】:Boolean Shared Preference is not storing布尔共享首选项未存储
【发布时间】:2015-07-27 16:54:16
【问题描述】:

我正在开发一款 Android 游戏,其中的设置中有一个选项可以关闭/打开游戏声音。 我想为游戏存储这些设置,为此我使用共享首选项来存储布尔值。 但问题是应用程序关闭后布尔变量不保存。 这是我的代码

设置SharedPreference的按钮点击监听器

volume.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (check == false) {
                check = true;
                PrefrencesClass.setBoolPreference(mContext,
                        Constants.APPSPREF, Constants.FIRSTTIME, true);
                volume.setBackgroundResource(R.drawable.mute);
                Log.e("Check is True", "Preference is True");
            } else if (check == true) {
                check = false;
                volume.setBackgroundResource(R.drawable.volume);

                PrefrencesClass.setBoolPreference(mContext,
                        Constants.APPSPREF,Constants.FIRSTTIME, false);
                Log.e("Check is false", "Preference is false");
            }

            Toast.makeText(getApplicationContext(), "Volume is Clicked",
                    Toast.LENGTH_SHORT).show();
        }
    });

我的函数来设置布尔值SharedPreference

public static final void setBoolPreference(Context base, String prefName,
        String key, boolean value) {

    SharedPreferences userPref = base.getSharedPreferences(prefName,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = userPref.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

这就是我获得SharedPreference的方式

public static final boolean getBoolPreference(Context base,
        String prefName, String key) {

    SharedPreferences usePref = base.getSharedPreferences(prefName,
            Context.MODE_PRIVATE);
    boolean value = usePref.getBoolean(key, false);
    return value;
}

这是我需要使用sharedpreference保存状态来播放声音的代码

mPlayer = MediaPlayer.create(MainActivity.this, R.raw.stronghold);

    if (PrefrencesClass.getBoolPreference(context, Constants.APPSPREF,
            Constants.FIRSTTIME) == false) {
        mPlayer.start();
        mPlayer.setLooping(true);
    }

布尔状态不保存请帮忙

【问题讨论】:

  • 你能显示setBoolPreferences方法吗?
  • 抱歉,错误地发布了sharedIntPreference 的代码,刷新为正确的@Prera​​kSola
  • 您正在使用不同的密钥。静音为Constants.FIRSTTIME,音量为Constants.APPSPREF
  • 再次查看 setBoolPreference Method Constant.APPSPREF 是 String 值,Actual key 是 Constants.FIRSTTIME 并且在 @Prera​​kSola 中都相同

标签: android boolean sharedpreferences


【解决方案1】:

试试这个

public static void saveBooleanToSharedPref(Context context, String key, boolean value){

        SharedPreferences settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(key, value);
        editor.commit();

}//saveBooleanToSharedPref


public static boolean getBooleanBySharedPref(Context context, String key){

        SharedPreferences settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
        boolean value = settings.getBoolean(key, true);

        return value;

}//getStringBySharedPref

你的设置是错误的,因为你使用了 putInt 方法。

【讨论】:

  • 首先是我写 putInt 方法是错误的但是我尝试了你的代码但仍然没有保存@br00
  • 你能把剩下的代码贴出来吗?也许问题可能是您的变量“检查”。你确定你输入了if条件吗?或者问题可能出在您的变量 Constants.FIRSTTIME..
  • 我在onCreate上面声明了这个变量方法boolean check = false;,这是唯一的地方是在volume上使用这个变量点击你可以检查上面的音量onclick代码@br00跨度>
  • 我解决了这个问题,你的答案不是我想要的,但它接近我的答案,所以选择这个作为选定的答案,但你的代码的共享偏好工作完全正常。
【解决方案2】:

你应该可以说:

volume.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

            check = !check  // avoids if statements, same below

            SharedPreferences prefsget =   PreferenceManager.getDefaultSharedPreferences(YourActivity.this);
            SharedPreferences.Editor prefset = prefsget.edit();
            prefset.putBoolean(yourBoolVar, !prefsget.getBoolean(yourBoolVar, false));
            prefset.commit();
    }
});

您仍然可以使用 if 语句来设置图像背景。但是我上面的内容应该减少你的很多代码。请记住将我在上面键入的活动替换为您自己的活动以及布尔变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2019-01-09
    • 2014-05-07
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多