2014-06-12 61 views
5

我使用SharedPreferences將服務器數據保存在本地,當設備進入關閉狀態時,SharedPreferences中的值丟失,再次從服務器下載。如何保存共享首選項值甚至設備關閉?

public void saveCollection(Context context) 
{ 
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0); 
    SharedPreferences.Editor e = settings.edit(); 
    e.clear(); 
    e.putStringSet(context.getString(R.string.collection), collection); 
    e.commit(); 
} 

我已經這樣做了,但沒有運氣。

+0

你怎麼知道他們沒有保存?您可能需要將代碼發佈到您嘗試檢索它們的地方,因爲如果您做得正確,它們將**在設備關閉時存儲這些值。 – codeMagic

+1

你確定這不應該存儲在SQLite嗎?就是想。 SQLite示例在這裏:http://stackoverflow.com/questions/24142830/create-offline-sqlite-database-for-groups/24144236#24144236 另外,我不確定您獲得的首選項是否實際上是Application-具體。嘗試從ApplicationContext中打開SharedPreferences。 – EpicPandaForce

+0

現在,通過「設備關閉」,我假設你的意思是睡眠模式,對嗎? –

回答

-3

共享首選項始終存儲在文件系統中,因此它們始終在設備關閉時保存。你的問題更可能在閱讀他們,而不是存儲他們 - 尤其是因爲你不只是打開應用程序的默認共享首選項。

+5

這是否意味着要回答?如果是這樣,我錯過了答案。 – WarrenFaith

+0

沒有。他表示,當設備關閉時,他失去了他的共同偏好。我說這沒有辦法發生,他可能在重新啓動時錯誤地閱讀它們。 –

+3

仍然你的「答案」不提供任何有關如何閱讀它們的知識。說他只是「做錯了什麼」,並說他的一個假設是不正確的,這僅僅是對你的文本的限制。我寧願將其看作是評論而不是答案。因此,我建議改變它,否則我會舉報它,社區將決定。 – WarrenFaith

0

看起來你不是在訪問正確的喜好:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

(假設「本」是一個上下文)通過一個非常具體的生命週期

0

每個活動都按在the developer documentation定義。讀完之後,您可能會發現每次從焦點獲取Activity時,都會調用內置的onPause()方法。考慮到這一點,你可以添加到您的活動如下:

@Override 
public void onPause() { 
    super.onPause(); // Always call the superclass method first 

    // You can call saveCollection() here and now it will always be called when 
    // the activity is taken away (assuming your app doesn't force close) 
    saveCollection(this); 
} 
0

就個人而言,我用這個方法來獲取SharedPreferences對象:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

我想你應該叫saveCollection()在onPause()