我正在尝试使用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条经验 获得超5个赞
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
提交
取消