Java Android首选项错误,“;字符串不能强制转换为int";

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 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)

在我的
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