ClassCastException没有任何特定的代码错误

时间:2014-12-24 21:52:02

标签: android sharedpreferences

我从共享偏好中检索整数值,如下所示:

AudioManager Am = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
    int errorThisLine250 = prefs.getInt("adanvlm", Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

我收到此错误!!!

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
        at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:239)
        at aim.salatuna7.dialogs.AdanDialog.onCreateDialog(AdanDialog.java:250)

这里的starnge是应用程序运行良好而没有任何错误,今天每当我显示对话框时它都会开始显示此错误。 错误发生在 int errorThisLine250 。有什么建议吗?

修改: 我试过了:

Integer.parseInt(prefs.getString("adanvlm", String.valueOf(Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC))));

并且不工作

2 个答案:

答案 0 :(得分:1)

显然,tou最初将此SharedPreference作为字符串首选项,然后将其更改为整数首选项。

卸载并重新安装您的应用,从而删除内部存储的内容并删除旧版的偏好设置。

答案 1 :(得分:0)

您的EditTextPreference看起来有一个默认值为string:

<EditTextPreference android:defaultValue="0" android:key="adanvlm" />

所以,很可能但有点奇怪,你很多人继续使用字符串版本并将该字符串转换为int,然后在对话框和其他地方使用int

// get the preference value as a string
String adanvlmString = prefs.getString("adanvlm", String.valueOf(Am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)));
// convert the preference value from string to int
int adanvlmInt = Integer.parseInt(adanvlmString);

您可以按如下方式对EditTextPreference进行子类化:PreferenceActivity: save value as integer