2014-02-20 24 views
1

我在多項活動中獲得Sharedpreference值,有時我從Android的共享偏好中獲得舊值,我創建了自己的偏好文件來存儲loginid/pass等。 錯誤的可能原因是什麼?在Android錯誤中使用共享首選項時獲取舊數據?

我在這裏創建代碼

public void openPref() { 

    sharedPreferences = context.getSharedPreferences("abc",Context.MODE_PRIVATE); 
} 

設置和獲取功能

public String getValue(String key, String defaultValue) { 
     openPref(); 
     String result = sharedPreferences.getString(key, defaultValue); 

     if (result != null) 
      result = decrypt(key, result); 

     sharedPreferences = null; 
     return result; 
    } 

    public void setValue(String key, String value) { 
     if (value != null) 
      value = encrypt(key, value); 

     openPref(); 
     Editor prefsPrivateEditor = sharedPreferences.edit(); 
     prefsPrivateEditor.putString(key, value); 
     prefsPrivateEditor.commit(); 
     prefsPrivateEditor = null; 
     sharedPreferences = null; 
    } 

。對於設定值

Pref objPref = new Pref(getApplicationContext()); 
objPref.setValue(Pref.abc, 'abc'); 

爲了得到值

Pref objPref = new Pref(getApplicationContext()); 
objPref.getValue(Pref.abc, null) 

問題

我從兩個不同的活動settting ABC值,但 每一件事工作得很好,但有時它在我的Android應用程序突然老去值。

+1

你總是打電話給editor.commit()嗎? – nikis

+0

@nikis是的,但舊值將被存儲? –

+0

SharedPreferences將數據存儲在對中。所以對於特定的鍵值會被覆蓋。沒有辦法從SharedPreferences中覆蓋舊數據。 – kevz

回答

0

您的sharedPreferences對象是舊的。每次你需要從它得到一個數據再次初始化

sharedPreferences = context.getSharedPreferences("abc",Context.MODE_PRIVATE); 

然後嘗試獲取數據。由於數據是從其他活動更改的,因此您需要重新獲取。

+0

嗨eluleci,我們每次創建sharedpreferences(openPref();) –