最终静态字段的值可以在android中更改吗?

问题描述:

我工作SharedPreferences,在我的计划,我有一个最后的静态每个变量的名称和电子邮件作为最终静态字段的值可以在android中更改吗?

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

我改变的价值通过用用户输入的名字和电子邮件来代替它们的常量字段

sEditor.putString(PREF_NAME,name); 
    sEditor.putString(PREF_EMAIL,email); 
    sEditor.commit(); 

但根据其他答案o n堆栈溢出a static final variable value cannot be changed once initialized 但是,当我插入名称和电子邮件到PREF_NAMEPREF_EMAIL 这里静态最终字段的值会发生变化这怎么可能?

+0

这是首选名称不值。 –

+0

与java不同 –

当你做到这一点sEditor.putString(PREF_EMAIL,email);,第一个参数是关键,而不是价值。那么会发生什么情况是您的偏好电子邮件的价值保存为KEY PREF_EMAIL

因此,关键是永不改变。您的共享首选项是Key-ValuePair种类的集合。字符串PREF_EMAIL的值是您在行中定义的值 - public static final String PREF_EMAIL = "email";,即电子邮件,并且将始终保持不变。

用标识符关键字保存的首选项的值更改为PREF_EMAIL

所以你的共享偏好将被保存为 -

email = "[email protected]" //这只是一个例子表示。

其一个sharedPrefence关键所以基本上你正在改变对关键不是静态最终变量的值

使用这两功能设置你的名字&电子邮件

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

您可以为电子邮件等领域做同样的