2016-10-10 67 views
1

我目前正在嘗試保存本地聊天名稱,但只保存最新的首選項。以下是我如何將字符串保存到特定鍵。Sharedpreference只在應用程序重新啓動後保存最新字符串

public void saveSettings(Context context, String key, String value){ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putString(key, value).apply(); 

這是我如何獲得一個字符串:

public String getString(Context context, String key, String defaultValue){ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    return preferences.getString(key,defaultValue); 
} 

的問題是,它只會返回上次保存的字符串,按鍵的其餘部分將返回defaultvalue。例如,我用第一種方法用3個不同的鍵保存3個不同的字符串。當試圖使用getString() 檢索字符串時它只會返回上次保存的密鑰的字符串。

+0

您是否試圖獲取首選項文件並檢查數據是否正在寫入? – Mauker

回答

0

也許我錯了,但我看不出提交這裏,在編輯器...

+0

我正在使用應用程序正在做同樣的事情,如果我已經正確地理解它 –

+0

Yeap,我想,只是試一試 – 2016-10-11 13:30:02

0

您使用commit()方法,像下面的正式保存喜好的方式:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString(key, value); 
editor.commit(); 
+0

我正在使用應用程序,如果我已經理解它做同樣的事情正確 –

+0

@ CT.Kevin兩者之間的區別在於,.commit()是持久性的(即它將首選項存儲到永久存儲)。 .apply()只會在內存中創建更改,因此重新啓動應用程序不會保留這些首選項。 –

+0

@ CT.Kevin也想指出,是的,應用程序會異步寫入存儲,但如果有一些問題阻止了這一點,那麼您將不會收到通知,因此您所做的事情可能存在更深層次的問題,很明顯,你應該能夠進行調試。 –

相關問題