Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences不保存布尔值_Java_Android - Fatal编程技术网

Java SharedReferences不保存布尔值

Java SharedReferences不保存布尔值,java,android,Java,Android,我无法使用SharedReferences保存布尔值。由于某种原因,该值总是true。以下是保存值的方式: settings = getSharedPreferences("UserConfigs", MODE_PRIVATE); b1 = settings.getBoolean("Gravity", false); editor = settings.edit(); action_G.setOnClickListener(new View.OnClickListene

我无法使用
SharedReferences
保存布尔值。由于某种原因,该值总是
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;
        }
    });
怎么了

编辑:

更改代码但不保存pref

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

这是因为每次点击最后你都会把你的b1转换成!b1(
b1!=b1
)意味着每次单击时,“重力”仅保存为“真”。

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

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


因此,不要使用
b1
而是使用
settings.getBoolean(“重力”,false)直接。

您如何更改b1的值?b1在这个场景中应该是最终的。我猜你的b1=!b1更改局部变量的值,而不是全局变量的值。使用settings.getBoolean(“重力”,false)代替b1;直接。图像是否在单击时更改?但每当您再次单击按钮时,它将显示为if(!f1){}所以,它将再次将true存储到共享首选项中。这就是为什么当您获得SharedReference时,它总是返回true/
editor.apply()同样,在这个场景中,设置和编辑器都必须是最终的。将它们移动到
onClickListener
中。如果您遵循逻辑,则这不是真的。首先,您应该正确显示逻辑,然后您应该放弃投票。如果在输入块b1时b1为真!b1将其更改为false。下次输入时,它将为假。@Sasan Ah没有提到b1=true;按defaulf,布尔值为负。是的,只有在“重力”设置不存在的情况下,默认值为负。