我有一个方法可以从DefaultSharedPreferences中读取一个字符串和两个整数,当我尝试将存储在DefaultSharedPreferences中的两个整数中的值放入其他两个整数时,我收到一条错误消息,指出两个保存的整数(DefaultSharedPreferences)实际上是字符串。这是LogCat的错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:221)
这是我的preferences.xml(其中两个int字段设置为android:inputType =“ number”)和尝试读取值的方法:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:defaultValue="@string/set_ip_server"
android:key="ip_server"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="@string/put_ip"
android:title="@string/set_ip_server" />
<EditTextPreference
android:inputType="number"
android:defaultValue="@string/set_port_server"
android:key="port_server"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="@string/put_port"
android:title="@string/set_port_server" />
<EditTextPreference
android:inputType="number"
android:defaultValue="@string/set_port_client"
android:key="port_android"
android:maxLines="1"
android:selectAllOnFocus="true"
android:singleLine="true"
android:summary="@string/put_port"
android:title="@string/set_port_client" />
string ip_server;
int port_server;
int port_android;
public void read_connection_params()
{
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
ip_server=pref.getString("ip_server", "192.168.0.102");
port_server=pref.getInt("port_server", 1234);
port_android=pref.getInt("port_android", 37123);
}
我仔细检查了与这两个“集成器”有关的所有内容-port_server和port_android,但我没有主意。
编辑:我尝试
Integer.parseInt( preferences.getString("defaultTip", "15"))
,但仍然出现相同的错误。 最佳答案
EditTextPreference
保存的值是String
,但是您试图在此键下获取int
。
port_server=pref.getInt("port_server", 1234);
port_android=pref.getInt("port_android", 37123);
一定是
port_server = Integer.parseInt(pref.getString("port_server", "1234"));
port_android = Integer.parseInt(pref.getString("port_android", "37123"));
如果您要使用
ListPreference
,同样适用于。