SharedPreferences不保存布尔值

时间:2016-07-29 11:38:15

标签: java android

我无法使用SharedPreferences保存布尔值。由于某种原因,该值始终为true。这就是保存值的方式:

 settings = getSharedPreferences("UserConfigs", MODE_PRIVATE);
    b1 = settings.getBoolean("Gravity", false);
    editor = settings.edit();
    action_G.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!b1) {
                action_G.setImageResource(R.drawable.ic_align_right);
                txt.setGravity(Gravity.RIGHT);
                editor.putBoolean("Gravity", true);
                editor.commit();
            } else {
                action_G.setImageResource(R.drawable.ic_align_center);
                txt.setGravity(Gravity.CENTER);
                editor.putBoolean("Gravity", false);
                editor.commit();
            }
            b1 = !b1;
        }
    });

有什么问题?

编辑:

更改代码但不保存?

 settings = getSharedPreferences("UserConfigs", MODE_PRIVATE);
    editor = settings.edit();


    action_G.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (settings.getBoolean("Gravity", false)) {
                editor.putBoolean("Gravity", false).apply();

                action_G.setImageResource(R.drawable.ic_align_center);
                txt.setGravity(Gravity.CENTER);
            } else {
                editor.putBoolean("Gravity", true).apply();

                action_G.setImageResource(R.drawable.ic_align_right);
                txt.setGravity(Gravity.RIGHT);
            }
        }
    });

2 个答案:

答案 0 :(得分:0)

如果您需要在匿名类中使用活动上下文中的变量,则需要将其声明为final。

因此,在调用onClickListener之后,b1之前初始化的onClickListener变量不会更改。因此,对内部b1的引用与全局不同b1

所以,不要直接使用b1使用settings.getBoolean("Gravity", false);

答案 1 :(得分:-1)

之所以发生这种情况,是因为最后每次点击都会将您的b1转换为!b1(b1 != b1)表示每次点击都会将“重力”仅保存为“true”。