我正在嘗試使用SharedPreferences并且偶然發現了我的一個可能很愚蠢的錯誤。這是我的代碼(MainActivity類):private Boolean checkSSID;private String connectionSSID;private int leftPort;private int rightPort;private int LLUPort;private int localUDPPort;private String platformIPAddrStr;在onCreate()方法的底部:PreferenceManager.setDefaultValues(this, R.xml.preferences, false);SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);checkSSID = sharedPref.getBoolean (SettingsActivity.KEY_PREF_CHECK_SSID, false);connectionSSID = sharedPref.getString (SettingsActivity.KEY_PREF_CONNECTION_SSID, "\"bulldog\"");leftPort = sharedPref.getInt (SettingsActivity.KEY_PREF_LEFT_UDP_PORT, 4001);rightPort = sharedPref.getInt (SettingsActivity.KEY_PREF_RIGHT_UDP_PORT, 4002);LLUPort = sharedPref.getInt (SettingsActivity.KEY_PREF_LLU_UDP_PORT, 8888);localUDPPort = sharedPref.getInt (SettingsActivity.KEY_PREF_LOCAL_UDP_PORT, 5555);platformType = sharedPref.getInt (SettingsActivity.KEY_PREF_PLATFORM_TYPE,0);在第一次getInt()調用應用程序崩潰時出現此錯誤:java.lang.RuntimeException: Unable to start activity ComponentInfo{it.xxx/it.xxx.MainActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
3 回答

ibeautiful
TA貢獻1993條經驗 獲得超6個贊
EditTextPreference
返回String
值,如ListPreference
. 您需要將從共享首選項中提取的每個值從 轉換String
為int
。例如:
platformType = Integer.valueOf(sharedPref.getString (SettingsActivity.KEY_PREF_PLATFORM_TYPE,"0"));

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
從 XML 資源加載首選項只能處理字符串(據我所知)。在您的場景中,這是@string:
<android.support.v7.preference.SwitchPreferenceCompat
android:defaultValue="true"
android:key="checkSSID"
android:summary="@string/checkSSID_summary"
android:title="@string/checkSSID_title" />
因此,我不知道getInt等其他方法的用例,但我最終也將其作為字符串加載,然后將其解析/轉換為所需的類型,如 @xcesco 的 describe。
添加回答
舉報
0/150
提交
取消