Android首选项错误,“字符串无法转换为int”

时间:2013-07-24 20:47:05

标签: java android string integer sharedpreferences

我正在尝试设置偏好设置活动,但我的应用程序一直崩溃,我得到以下logcat:

  
    

FATAL EXCEPTION:main java.lang.RuntimeException:无法启动活动ComponentInfo {com.appthing.myapp / com.appthing.myapp.Main}:     java.lang.ClassCastException:java.lang.String无法强制转换为     java.lang.Integer中

  
     

引起:java.lang.ClassCastException:java.lang.String不能   强制转换为java.lang.Integer 07-24 16:37:59.556:E / AndroidRuntime(17384):   在   android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:240)

在我的Main活动中,我在onResume()方法中包含以下代码:

    SeekBar tipSeekBar = (SeekBar) findViewById(R.id.tipSeekBar);
    SeekBar splitSeekBar = (SeekBar) findViewById(R.id.splitSeekBar);

    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);

    tipSeekBar.setProgress(preferences.getInt("defaultTip", 15));
    splitSeekBar.setProgress(preferences.getInt("defaultSplit", 1));
    tipSeekBar.setMax(preferences.getInt("maxTip", 25));
    splitSeekBar.setMax(preferences.getInt("maxSplit", 10));

以下是我在Preference类中的内容(根据要求):

addPreferencesFromResource(R.layout.preferences);
// I was told in tutorials this is all I need in the oncreate method

我不明白为什么它会对字符串说些什么。我的所有值都是整数,我使用android:inputType="number"来确保只能输入一个int。我也尝试卸载并重新安装应用程序以清除缓存,但没有任何作用。

解决:

“您在XML中的首选项,即使您设置了android:inputType =”number“仍然存储为字符串”Waza_Be)。 我所要做的就是Integer.parseInt()来获取正确的值。

2 个答案:

答案 0 :(得分:23)

您在XML中的首选项,即使您设置android:inputType="number"仍然存储为字符串

您有两个选择:

1)'not-so-nice':Integer.parseInt( preferences.getString("defaultTip", "15"));

2)使用您自己的整数偏好类型。设置起来比较复杂,但确实更好(类似的问题在这里:https://stackoverflow.com/a/3755608/327402

答案 1 :(得分:0)

如果您使用正确的数据类型存储首选项,那么它应该不是问题。请查看 JavaDoc here