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

发布于 2024-12-02 19:03:50 字数 817 浏览 3 评论 0原文

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

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

我使用这个简单的语句读取它:

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

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

文档getInt() “如果此名称的首选项不是 int,则抛出 ClassCastException。” - 而且我知道此首选项被明确定义为 (字符串?)但是,如果这是异常的原因,我应该如何使用 SharedPreferences.getInt()

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

I have a simple (not user-editable) numerical setting defined in a preferences XML as follows:

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

And I read it using this simple statement:

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

It works, but when I try to read it, for the first time after application install, it generates a ClassCastException.

The documentation says that getInt() "Throws ClassCastException if there is a preference with this name that is not an int." - and I know that this preference is clearly defined as an <EditTextPreference> (a string?) but, if this is the reason for the exception, how I am supposed to use SharedPreferences.getInt()?

I know I can use SharedPreferences.getString() instead and then do the parsing/conversion myself, but then what is the purpose of SharedPreferences.getInt()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷离° 2024-12-09 19:03:50

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

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

如果您手动放置,请使用getInt()

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

You can store preferences as sharedPreferences.edit().putInt(..).commit() (as an example);

And then get them as getInt. But if you use EditTextPreference it will set the type of the preference to string. So if you use EditTextPreference to store some data, use Integer.valueOf(getString) to get it back.

If, you put it manually, use getInt().

As a workaround, you can set onPreferenceChangeListener on this EditTextPreference , and whenever user changes it, you will manually save it as an int, so then, getInt will work normally.

日久见人心 2024-12-09 19:03:50
android:defaultValue="0"

是一个字符串。

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

android:defaultValue="0"

is a string.

There is no way to declare an actual int in the xml of your prefs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文