好像我必須做一些基本的非常錯誤的事情,但結果 很奇怪,而且我在追蹤問題時遇到了問題。當閱讀Android默認共享首選項時,出現遞歸ClassCastExceptions
這是我我活動的onCreate()
PreferenceManager.setDefaultValues(this, R.xml.metronome_preferences, false);
mSharedPrefs=PreferenceManager.getDefaultSharedPreferences(this);
下面的代碼家住在onStart()。
Map<String,?> map = mSharedPrefs.getAll();
boolean t = mSharedPrefs.contains("tempo_list_pref");
Log.d(logID, "t= " + t + " preferences=" + map.toString());
mBPMOption = mSharedPrefs.getLong("tempo_list_pref", 100);
登錄貓正確地顯示:
十一月2日至五日:14:27.605:DEBUG /節拍器(16147):T =真 偏好= {graphics_list_pref = 1,conduct_list_pref = 12.0f, tempo_list_pref = 140,audio_list_pref = 2,meter_list_pref = 5}
mBPMOption很長。共享的prefs對象顯然是有效的,因爲我既可以檢索首選項作爲映射,也可以測試首選項的存在,但調用getLong()會導致ClassCastExceptions被遞歸拋出。至少,這是 我如何解釋我在調試器中看到的內容。錯誤對象 e包含e.cause,e.cause.cause,...。
我在模擬器和Google ION dev 手機中收到了同樣的錯誤。
任何想法,將不勝感激。
很好的建議!事實證明,我的所有數字資源都以字符串形式存在於地圖中,這與我的解決方法一致。我只對地圖中的值使用適當的decode()或parseFloat()靜態方法。如果Android內部首選項映射僅包含字符串值,則在我看來Android代碼應爲: Long v = Long.decode((String)map.get(key)); – Mark 2010-02-06 10:25:25