我正在尝试设置偏好设置活动,但我的应用程序一直崩溃,我得到以下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()
来获取正确的值。
答案 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。