Използвал съм sharedpreference
в моето приложение и проблемът е, когато принудително затворя или премахна приложение от скорошно приложение и го отворя отново, това ми дава изключение, казвайки Map Value without name attribute
и стойността на предпочитанието се нулира.
Потърсих този проблем над stackoverflow
и намерих някои от подобни въпроси като това и това.
след като проследих тези въпроси, се опитах да възпроизведа проблема в емулатора, но там не ми даде никакво изключение или нулиране на предпочитания xml. Извадих xml файл чрез DDMS от папката с данни на емулатора и всичко там изглежда добре. всяка стойност имаше непразно име на ключ.
Изключение на 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);
Ако проблемът е в моето устройство, какво трябва да направя, за да го коригирам?
commit()
промените всеки път? Или поне във вашияonPause()
. - person Simon   schedule 19.03.2014