为了账号安全,请及时绑定邮箱和手机立即绑定

getInt 中的 Android SharedPreferences 异常

getInt 中的 Android SharedPreferences 异常

Cats萌萌 2021-10-27 10:54:18
我正在尝试使用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. 您需要将从共享首选项中提取的每个值从 转换Stringint。例如:

platformType  = Integer.valueOf(sharedPref.getString
        (SettingsActivity.KEY_PREF_PLATFORM_TYPE,"0"));


查看完整回答
反对 回复 2021-10-27
?
梵蒂冈之花

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。


查看完整回答
反对 回复 2021-10-27
?
慕标5832272

TA贡献1966条经验 获得超4个赞

尝试像这样声明你的 int 值

public static final int
        KEY_PREF_LEFT_UDP_PORT = 1000;


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信