我在我的應用中使用了sharedpreference
,問題是當我強制關閉或從最近的應用程序中刪除應用程序並再次打開它時,它給了我例外說Map Value without name attribute
和優先值被重置。沒有名稱屬性的字符串值:字符串
我通過stackoverflow
找到了這個問題,我發現了一些類似的問題,如this和this。
下面這些問題後,我試圖重現模擬器中的問題,但它沒有給我任何例外或重置首選項XML。我通過DDMS從模擬器數據文件夾中提取了xml文件,所有內容都看起來不錯。每個值都有一個非空的鍵名稱。在真機上運行時
logcat的例外:所以在這裏
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): getSharedPreferences
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readThisMapXml(XmlUtils.java:568)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readThisValueXml(XmlUtils.java:821)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:755)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:494)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl.loadFromDiskLocked(SharedPreferencesImpl.java:113)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl.access$000(SharedPreferencesImpl.java:48)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:87)
是我要問:
有沒有在移動設備代碼或問題的任何問題?
shared = getSharedPreferences(PreferenceHandler.PREFS,Context.MODE_PRIVATE); Log.i(TAG,"preference object created"); last = shared.getInt(PreferenceHandler.LASTACTIVITY,PreferenceHandler.DEFAULTINT);
如果問題出在我的設備上,我應該怎麼做來糾正它?
你是否每次提交()'更改?或者至少在你的'onPause()'中。 – Simon
是的。我在將值添加到sharedPreference的方法結束時提交它。同樣的代碼也在模擬器中工作。強制關閉之前,我檢查模擬器的偏好xml文件並存儲了該值。還有,承諾是否真的導致了這個問題?如果沒有存儲鍵值對,它將返回默認值,但在我的情況下,它是說,名稱屬性爲空,我在日誌中檢查,並不是空。 – user2376920
你是對的,我只是想知道是否會有一些緩存導致一個損壞的文件,但如果你已經檢查過XML,事實並非如此。這很奇怪。如果你找到答案,請回來張貼。 – Simon