【发布时间】:2013-07-24 13:10:14
【问题描述】:
我正在尝试设置首选项活动,但我的应用不断崩溃,并且我得到以下 logcat:
致命异常:主要 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() 来获取正确的值。
【问题讨论】:
-
你能看到调用 getInt 失败的哪一行的堆栈跟踪吗?是tipSeekBar还是splitSeekBar等
-
你能发布你如何存储偏好中的值吗?
-
是的,我已经更新了我的帖子。
-
代码中的哪一行抛出了这个异常?
标签: java android string integer sharedpreferences