2013-06-20 103 views
4

我遇到了問題SharedPreferences如果我想保存兩個不同的值。我試着用這段代碼:SharedPreferences覆蓋其他值

SharedPreferences sharedPref = getSherlockActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 

editor.putInt(getString(R.string.SavedStartSilentHour), hour); 
editor.commit(); 

editor.putInt(getString(R.string.SavedStartSilentMinute), min); 
editor.commit(); 

// One editor.commit() is enough 

如果我運行這段代碼,第一個值會被第二個值覆蓋。如果我刪除了第二部分,則值被正確保存。這是爲什麼?

+0

發表您的'<字符串名稱= 「SavedStartSilentHour」>'被定義XML文件。 –

+0

這就是謝謝你!有時你因爲那麼多樹而看不到森林......謝謝。 – Cilenco

+1

@ user2246674我想這將是一個很好的發表您的評論作爲答案。 –

回答

3

您的代碼看起來很完美!

您可以通過在所有「放置」操作之後提交所有內容來簡化操作。雖然我不認爲這可能是你的問題...

只要確保SavedStartSilentHourSavedStartSilentMinutes xml的定義值是正確定義的,即如果他們是相同的,當然他們將被覆蓋。 (這是唯一考慮到你的代碼對我有意義的事情)。你的進步

讓巢知道;)

+1

這就是它,謝謝你!有時你看不到森林,因爲有那麼多的樹......我有' 0 0'我改變了裏面的值,現在它完美的工作。謝謝。 – Cilenco

0

刪除第一次調用

editor.commit(); 

,你會被罰款。

+0

我不確定*爲什麼*這會使「第一個值[..]被第二個值覆蓋」。 – user2246674

+0

不起作用... – Cilenco

0

該問題最有可能是由於重新使用密鑰導致第二個賦值重寫相同鍵值。檢驗這一假設

的一種方式是使用簡單的按鍵,消除這種可能性,例如:

editor.putInt("hour", hour); 
editor.putInt("min", min); 

或者,調試器可以附接和getString(keyId)結果可以進行比較,以嘗試。

如果這確實「修復」的問題,然後確保SavedStartSilentHourSavedStartSilentMinute資源實際評估爲不同字符串 - 檢查資源文件本身。