2011-05-10 45 views
7

我的應用程序在SharedPreferences中存儲簡單設置,它工作正常。 但是,對於一個下載我的應用程序的人有問題。 SharedPreferences中的設置在關閉和重新加載應用程序之間正在丟失。保存在SharedPreferences中的用戶設置在重新加載應用程序之間刪除或丟失

他的手機某處是否存在權限問題,阻止了會話之間的數據保存?

有沒有人遇到過這個問題,或知道爲什麼會發生這種情況? 我很難調試它,我不知道從哪裏開始。

// I'm using SharedPreferences Like so: 
prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("accounts", accounts); 
editor.commit(); 

//retrieving stored information like: 
SharedPreferences prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0); 
String accounts = prefs.getString("accounts","[]"); 
+0

你使用的是DefaultSharedPreferences?如果沒有,你確定你使用的字符串鍵在使用之間是否相同?沒有代碼片段就很難知道你做錯了什麼。 – 2011-05-10 20:08:02

+0

嘿,不只是SharedPreferences,我使用相同的密鑰,應用程序適用於數千人,只是這一個人。依靠這些信息的應用程序的其餘部分功能完美,直到他關閉應用程序。 – Rob 2011-05-10 20:12:13

+0

它可能是一個存儲空間問題? – OceanBlue 2011-05-10 20:18:47

回答

6

我們遇到與我們的Android應用程序相同的問題。我們的用戶數量非常龐大(數百萬用戶),根據我們的統計數據,用戶遇到的問題約爲0.2%-0.3%。這似乎不是那麼重要,但是我們的用戶羣擁有數千用戶。

經過長時間搜索解決此問題,我們決定停止爲我們的項目使用SharedPreferences。我們正在使用簡單的SQLiteDatabase,而且工作得很好。

+1

感謝您的輸入。我一直在我的應用程序中使用SQLiteDatabase。 SharedPreferences不能被信任。 – Rob 2012-10-10 10:17:12

+1

雖然沒有解釋SharedPreferences的問題,但仍然接受答案,這是使用SharedPreferences解決此問題的唯一合理方法。 – Rob 2012-10-10 10:21:13

8

我有同樣的問題。幸運的是,我可以訪問該設備,並幫助我發現問題。首先,我研究了日誌文件並發現錯誤:

W/SharedPreferencesImpl(31354): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string 

因此,偏好文件在某種程度上已損壞。我已經預置文件世界可訪問我的應用程序:

SharedPreferences prefs = context.getSharedPreferences("main", Context.MODE_WORLD_READABLE); 

然後我拉文件,從設備到計算機

adb pull data/data/my.package.name/shared_prefs/main.xml c:\main.xml 

,並檢查首選項文件內容:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<string>Paris,France</string> 
<string name="HideStatusBar">1</string> 

第一個參數沒有「名稱」屬性。我已經檢查代碼,發現在某些情況下,第一個參數是寫在後續的方式:

SharedPreferences.Editor e = _Prefs.edit(); 
e.putString(null, paramValue); 
e.commit()  

名稱爲空。我修復了錯誤,問題消失了。所以,微不足道的錯誤可以完全損壞首選項文件。

0

您應該對您的應用程序進行更新,以臨時保存,清除並重新創建首選項文件。

我有類似的情況。一些用戶不僅把他們的首選項文件搞亂了,而且還有他們的SQL數據庫。你不能真正要求人們刪除並重新安裝,他們可能會丟失數據。但是,您的應用可以先自動備份,刪除損壞的文件,然後全部放回。

相關問題