2017-08-16 65 views
-4

我工作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不同 –

回答

0

當你做到這一點sEditor.putString(PREF_EMAIL,email);,第一個參數是關鍵,而不是價值。那麼會發生什麼情況是您的偏好電子郵件的價值保存爲KEY PREF_EMAIL

因此,關鍵是永不改變。您的共享首選項是Key-ValuePair種類的集合。字符串PREF_EMAIL的值是您在行中定義的值 - public static final String PREF_EMAIL = "email";,即電子郵件,並且將始終保持不變。

用標識符關鍵字保存的首選項的值更改爲PREF_EMAIL

所以你的共享偏好將被保存爲 -

email = "[email protected]" //這只是一個例子表示。

0

其一個sharedPrefence關鍵所以基本上你正在改變對關鍵不是靜態最終變量的值

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

您可以爲電子郵件等領域做同樣的

相關問題