我的共享首选项有问题,出了问题,我总是得到默认值。 我的共享偏好类是:
public class IntolleranceData {
static SharedPreferences intolleranceData;
static SharedPreferences.Editor intolleranceEditor;
static final String FISH_KEY="00000";
}
我通过以下方式在 Activity 中节省值(value):
intolleranceData = getApplicationContext().getSharedPreferences("intolleranceData", Context.MODE_PRIVATE);
intolleranceEditor = intolleranceData.edit();
intolleranceEditor.putString(FISH_KEY, "something").apply();
Toast.makeText(getApplicationContext(), "fish: " + intolleranceData.getString(FISH_KEY, "error"), Toast.LENGTH_LONG).show();
这很棒(toast显示正确的字符串 -“fish:something”),但是如果我尝试在 fragment 中使用共享首选项(在同一个 Activity 和 SharedPreferences 中,Activity 和 Fragment 位于同一个包中):
intolleranceData = getActivity().getSharedPreferences("intolleranceData", Context.MODE_PRIVATE);
intolleranceEditor = intolleranceData.edit();
String myKey = intolleranceData.getString(FISH_KEY,"error");
Toast.makeText(getActivity(),"fish: "+myKey,Toast.LENGTH_LONG).show();
它显示“fish: 00000”,所以这是默认值...
有什么办法可以解决我的问题吗?
最佳答案
在引用 GetActivity() 返回 SharedPreferences 之前,请尝试检查以确保 GetActivity() 不为 null。
此外,您还使用“apply()”将更改添加到 SharedPreferences,这是一个在后台运行的进程。如果您尝试过早地读取数据(例如同时),那么您通常可以获得默认值。或者,使用 .commit() 将更改保存到 SharedPreferences。
最后,如果问题与这些常见问题无关,那么在初始化 fragment 时将“getActivity().getApplicationContext()”保存到变量中,应该有助于解决上下文无法正确链接的问题!
祝你好运!
关于java - Android 共享首选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645655/