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,布尔值为负。是的,只有在“重力”设置不存在的情况下,默认值为负。