我在Android上製作了一個Tetris遊戲作爲學校的項目,現在我使用共享偏好來保存遊戲的當前狀態,以便在稍後時間恢復,我已經意識到,當你存儲超過100個偏好時,sharedprefernces對象開始以一種奇怪的方式工作,我可以保存所有內容,但是當我嘗試調用編輯器清除它(e.clear + e.commit)時刪除偏好。Java Android SharedPreferences問題
我希望得到任何幫助就這個問題
感謝
我在Android上製作了一個Tetris遊戲作爲學校的項目,現在我使用共享偏好來保存遊戲的當前狀態,以便在稍後時間恢復,我已經意識到,當你存儲超過100個偏好時,sharedprefernces對象開始以一種奇怪的方式工作,我可以保存所有內容,但是當我嘗試調用編輯器清除它(e.clear + e.commit)時刪除偏好。Java Android SharedPreferences問題
我希望得到任何幫助就這個問題
感謝
如果需要刪除特定的值,使用此: SharedPreferences.Editor.remove()
其次commit()
要刪除所有SharedPreferences.Editor.clear()
接着是commit()
(參考文獻https://stackoverflow.com/a/3687333/1584654)。
但是,如果值保持限制,對於共享首選項應該不是問題。
SharedPreferences
是很好和輕量級的機制如何堅持數據。
但我認爲對於遊戲來說這不是一場勝利。 SharedPreferences
通常用於保存非結構化數據,例如,如果您有一些需要登錄的應用程序,並且用戶成功登錄,則可以將此狀態保存爲SharedPreferences
,然後在Activities
中檢查用戶是否已登錄。但是在遊戲中你有(我想肯定)結構化的數據結構(例如玩家和他們的屬性(值),比如達到分數,失敗,勝利等)。
所以我建議你考慮一下數據持久化的另一種機制。特別是嘗試考慮使用經典對象序列化的可能性或使用SQLiteDatabase
,它們提供了更復雜的解決方案,如何堅持結構化數據。
一個主要優點是你可以持久化(序列化)整個對象,然後簡單地反序列化它們(而不是將它們作爲SharedPreferences中特定的「塊」來持久化)。關於SQLite
,它提供了與傳統序列化幾乎相同的解決方案,但對象在數據庫中表示爲表格。
你可以發佈你的代碼嗎?你有一些錯誤嗎? – Elior 2013-05-13 08:18:02
您可以閱讀http://stackoverflow.com/q/7420633/1321873獲取良好建議 – Rajesh 2013-05-13 08:19:30