我正在研究SharedPreferences
,在我的程序中,我有一个最终的静态变量,每个变量都是名称和电子邮件
public static final String PREF_NAME = "name";
public static final String PREF_EMAIL = "email";
初始化我的SharedPreferences
对象后,
SharedPreferences sPref = this.getSharedPreferences("com.vivid.sharedprefrences",Context.MODE_PRIVATE);
I通过用户输入的名称和电子邮件替换它们来更改常量字段的值
sEditor.putString(PREF_NAME,name);
sEditor.putString(PREF_EMAIL,email);
sEditor.commit();
但是根据堆栈溢出的其他答案a static final variable value cannot be changed once initialized
但是,当我将名称和电子邮件插入PREF_NAME
和PREF_EMAIL
时,静态最终字段的值会发生变化
怎么可能?
答案 0 :(得分:0)
它是一个sharedPrefence键,所以基本上你是在改变键而不是静态最终变量
的值答案 1 :(得分:0)
执行此操作sEditor.putString(PREF_EMAIL,email);
时,第一个参数是键而不是值。因此,根据您的偏好,为KEY PREF_EMAIL
保存电子邮件的价值。
因此关键永远不会改变。您的共享偏好是Key-ValuePair
种类的集合。字符串PREF_EMAIL
的值是您在行中定义的内容 - public static final String PREF_EMAIL = "email";
,即电子邮件,并且始终保持不变。
使用标识符键保存的首选项值PREF_EMAIL
会发生变化。
因此您的共享偏好设置将保存为 -
email = "email@sample.com"
//这只是一个示例表示。
答案 2 :(得分:0)
将此两项功能用于设置和获取您的姓名和值的值电子邮件
private static String SHARED_PREFERENCE ="your.package.name";
public static void setNameValue(Context c, String value) {
SharedPreferences sp = c.getSharedPreferences(SHARED_PREFERENCE, 0);
SharedPreferences.Editor editor = sp.edit();
editor.putString("name", value);
editor.commit();
}
public static String getNameValue(Context c) {
SharedPreferences sp = c.getSharedPreferences(SHARED_PREFERENCE, 0);
return sp.getString("name", "");
}
然后只需调用那些函数demo.setNameValue(context,"your_name_from_edittext");
您可以为电子邮件和其他字段执行相同操作