Java getInt中的Android SharedReferences异常

Java getInt中的Android SharedReferences异常,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正试图使用共享参考,但我犯了一个可能愚蠢的错误。这是我的代码(MainActivityclass): 在onCreate()方法的底部: PreferenceManager.setDefaultValues(this, R.xml.preferences, false); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); checkSSID = shared

我正试图使用共享参考,但我犯了一个可能愚蠢的错误。这是我的代码(MainActivityclass):

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);
在第一次调用应用程序崩溃时,出现以下错误:

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
首选项屏幕布局:

<PreferenceScreen xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.v7.preference.SwitchPreferenceCompat
        android:defaultValue="true"
        android:key="checkSSID"
        android:summary="@string/checkSSID_summary"
        android:title="@string/checkSSID_title" />
    <EditTextPreference
        android:defaultValue="bulldog"
        android:key="connectionSSID"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/LLUUDPPort_summary"
        android:title="@string/LLUUDPPort_title" />
    <EditTextPreference
        android:defaultValue="192.168.1.40"
        android:key="platformIPAddr"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/PlatformIPAddr_summary"
        android:title="@string/PlatformIPAddr_title" />
    <ListPreference
        android:defaultValue="1"
        android:entries="@array/PlatformType_titles"
        android:entryValues="@array/PlatformType_values"
        android:key="platformType"
        android:summary="@string/PlatformType_summary"
        android:title="@string/PlatformType_title" />
    <EditTextPreference
        android:defaultValue="4001"
        android:key="leftBankUDPPort"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/LeftBankUDPPort_summary"
        android:title="@string/LeftBankUDPPort_title" />
    <EditTextPreference
        android:defaultValue="4002"
        android:key="rightBankUDPPort"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/RightBankUDPPort_summary"
        android:title="@string/RightBankUDPPort_title" />
    <EditTextPreference
        android:defaultValue="8888"
        android:key="LLUUDPPort"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/LLUUDPPort_summary"
        android:title="@string/LLUUDPPort_title" />
    <EditTextPreference
        android:defaultValue="5555"
        android:key="localUDPPort"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:summary="@string/localUDPPort_summary"
        android:title="@string/localUDPPort_title" />
</PreferenceScreen>

我在哪里失败了?

EditTextPreference
返回
String
值,如
ListPreference
。您需要将从共享首选项中提取的每个值从
String
转换为
int
。例如:

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

EditTextPreference
返回
String
值,如
ListPreference
。您需要将从共享首选项中提取的每个值从
String
转换为
int
。例如:

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

试着像这样声明你的int值

public static final int
        KEY_PREF_LEFT_UDP_PORT = 1000;

试着像这样声明你的int值

public static final int
        KEY_PREF_LEFT_UDP_PORT = 1000;

从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所述。

从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所述。

看起来存储在共享首选项中的所有键都是字符串,尝试将它们全部作为字符串加载,然后将需要的键解析为整数。 像这样:

String leftPort_string = sharedPref.getString
    (SettingsActivity.KEY_PREF_LEFT_UDP_PORT,"4001");

leftPort=Integer.parseInt(leftPort_string);

看起来存储在共享首选项中的所有键都是字符串,请尝试将它们全部作为字符串加载,然后将需要的键作为整数解析。 像这样:

String leftPort_string = sharedPref.getString
    (SettingsActivity.KEY_PREF_LEFT_UDP_PORT,"4001");

leftPort=Integer.parseInt(leftPort_string);

我甚至在leftPort上也有错误。。。不仅是在这件事上。。。这并不能解决所有问题(但欢迎使用)。EditTextPreferences返回字符串,如ListPreferences。您试图提取的每个字段都是一个字符串。我修改了答案,只是为了更清楚。看起来这就是解决方案。。。thnxI在leftPort上也有错误。。。不仅是在这件事上。。。这并不能解决所有问题(但欢迎使用)。EditTextPreferences返回字符串,如ListPreferences。您试图提取的每个字段都是一个字符串。我修改了答案,只是为了更清楚。看起来这就是解决方案。。。嗯,不。。。KEY\u PREF\u LEFT\u UDP\u PORT和SettingsActivity中定义的其他最终变量只是preferences.xml中“KEY”值的提醒。嗯,不。。。KEY_PREF_LEFT_UDP_PORT和SettingsActivity中定义的其他最终变量只是preferences.xml中“KEY”值的提醒…哦,对了,我的错。您是否尝试将int放入一个不同的整数资源xml中,如这里所述?是的,我知道,但正如你在xcesco中所读到的,终端问题是TextView只输出字符串objects。对,我的错。您是否尝试将int放入一个不同的整数资源xml中,如这里所述?是的,我知道,但正如您在xcesco中看到的,终端问题是TextView只输出字符串对象