首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SharedPreferences.getInt()会导致ClassCastException -为什么?

SharedPreferences.getInt()会导致ClassCastException -为什么?
EN

Stack Overflow用户
提问于 2011-08-31 20:59:37
回答 2查看 10.6K关注 0票数 22

我在preferences XML中定义了一个简单的(用户不可编辑的)数字设置,如下所示:

<EditTextPreference
  android:key="@string/numeric_val"
  android:defaultValue="0" />

我用这个简单的语句读到了它:

sharedPrefs.getInt(getString(R.string.numeric_val), 3)

它可以工作,但当我尝试读取它时,在应用程序安装之后第一次执行时,它会生成一个ClassCastException

documentationgetInt()“如果这个名字有一个不是整数的首选项,就抛出ClassCastException”--我知道这个首选项被明确定义为一个<EditTextPreference> (一个字符串?)但是,如果这是异常的原因,那么我该如何使用SharedPreferences.getInt()呢?

我知道我可以使用SharedPreferences.getString(),然后自己进行解析/转换,但是SharedPreferences.getInt()的用途是什么呢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-31 21:04:11

您可以将首选项存储为sharedPreferences.edit().putInt(..).commit() (作为示例);

然后将它们作为getInt获取。但是如果您使用EditTextPreference,它会将首选项的类型设置为string。因此,如果您使用EditTextPreference存储某些数据,请使用Integer.valueOf(getString)将其取回。

如果是手动设置的,请使用getInt()

作为一种解决办法,您可以在此EditTextPreference上设置onPreferenceChangeListener,每当用户更改它时,您都会手动将其保存为一个int,这样getInt就可以正常工作。

票数 32
EN

Stack Overflow用户

发布于 2011-08-31 21:37:42

android:defaultValue="0"

是一个字符串。

无法在首选项的xml中声明实际的int

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7257232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档