Android DefaultSharedPreferences String而不是Integer

时间:2014-06-17 21:53:57

标签: java android string integer classcastexception

我有一个从DefaultSharedPreference中读取字符串和两个整数的方法。当我尝试将存储在DefaultSharedPreferences中的两个整数中的值放入其他两个整数时,我得到一个错误,说明两个保存的整数(DefaultSharedPreferences)是实际上是strings.Here是来自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")),但我仍然遇到同样的错误。

3 个答案:

答案 0 :(得分:1)

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,如果您要使用任何内容。

答案 1 :(得分:0)

可能是因为您的默认值是字符串。尝试将其更改为整数资源。

http://developer.android.com/guide/topics/resources/more-resources.html#Integer

答案 2 :(得分:0)

起初我试过

port_server=Integer.parseInt(pref.getString("port_server", "1234"));
port_android=Integer.parseInt(pref.getString("port_android", "37123"));

它失败了。

我通过使用一些临时变量

获得工作
String port_s=preferinte.getString("port_server", "1234");                                  
String port_a=preferinte.getString("port_android", "37123");                                    
port_server=Integer.parseInt(port_s);
port_android=Integer.parseInt(port_a);