我从共享偏好中检索整数值,如下所示:
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))));
并且不工作。
答案 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