Java Android首选项错误,“;字符串不能强制转换为int";
我正在尝试设置首选项活动,但我的应用程序不断崩溃,我得到以下日志: 致命异常:main java.lang.RuntimeException:无法启动活动组件信息{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.SharedReferencesImpl.getInt(SharedReferencesImpl.java:240) 在我的Java Android首选项错误,“;字符串不能强制转换为int";,java,android,string,integer,sharedpreferences,Java,Android,String,Integer,Sharedpreferences,我正在尝试设置首选项活动,但我的应用程序不断崩溃,我得到以下日志: 致命异常:main java.lang.RuntimeException:无法启动活动组件信息{com.appthing.myapp/com.appthing.myapp.main}: java.lang.ClassCastException:无法将java.lang.String转换为 java.lang.Integer 原因:java.lang.ClassCastException:java.lang.String不能为 转
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));
以下是我在首选项类中的内容(根据要求):
我不明白为什么它说的是关于字符串的东西。我所有的值都是整数,我使用的是android:inputType=“number”
来确保只能输入整数。我还尝试卸载和重新安装应用程序以清除缓存,但没有任何效果
断然的:
“您在XML中的首选项,即使您设置了android:inputType=“number”仍存储为字符串”(by)。
我所要做的就是执行Integer.parseInt()
以获取正确的值。如果您使用正确的数据类型存储首选项,那么这应该不会有问题。请查看JavaDoc您的XML首选项,即使您设置了android:inputType=“number”
仍以字符串形式存储
您有两种选择:
1) 'notsonice':Integer.parseInt(preferences.getString(“defaultTip”,“15”))代码>
2) 使用您自己类型的整数首选项。首先设置更复杂,但实际上更好(这里的问题类似:)如果
- 您使用相同的
键
存储两种或多种不同类型的值
- 首先将值存储为
String
,然后更改int
值的存储和检索实现。对于这种情况,只需清除缓存
您能看到调用getInt的哪一行的堆栈跟踪失败了吗?是tipSeekBar还是splitSeekBar等。你能发布你是如何在首选项中存储值的吗?是的,我已经更新了我的帖子。你的代码中的哪一行引发了这个异常?“你在XML中的首选项,即使你设置了安卓:inputType=“number”仍然存储为字符串”这是关键,我从来不知道!非常感谢。很高兴我能帮上忙。那太傻了。尤其是当ListPreferences引用时,它仍然将它们视为字符串。谢谢你的提示。我在整数对象的共享首选项中设置了字符串值“”,所以当我从首选项中获取值时,我就遇到了这个问题,所以请确保你将首选项中的值设置为仅整数。好的,这是我第二次遇到这个问题,相隔几年,我仍然要问,preferences.getInt
如果只是抛出一个异常,那它有什么意义呢?!
addPreferencesFromResource(R.layout.preferences);
// I was told in tutorials this is all I need in the oncreate method