我在preferences XML中定义了一个简单的(用户不可编辑的)数字设置,如下所示:
<EditTextPreference
android:key="@string/numeric_val"
android:defaultValue="0" />
我用这个简单的语句读到了它:
sharedPrefs.getInt(getString(R.string.numeric_val), 3)
它可以工作,但当我尝试读取它时,在应用程序安装之后第一次执行时,它会生成一个ClassCastException
。
documentation说getInt()
“如果这个名字有一个不是整数的首选项,就抛出ClassCastException”--我知道这个首选项被明确定义为一个<EditTextPreference>
(一个字符串?)但是,如果这是异常的原因,那么我该如何使用SharedPreferences.getInt()
呢?
我知道我可以使用SharedPreferences.getString()
,然后自己进行解析/转换,但是SharedPreferences.getInt()
的用途是什么呢
发布于 2011-08-31 21:04:11
您可以将首选项存储为sharedPreferences.edit().putInt(..).commit()
(作为示例);
然后将它们作为getInt获取。但是如果您使用EditTextPreference,它会将首选项的类型设置为string。因此,如果您使用EditTextPreference存储某些数据,请使用Integer.valueOf(getString)
将其取回。
如果是手动设置的,请使用getInt()
。
作为一种解决办法,您可以在此EditTextPreference上设置onPreferenceChangeListener
,每当用户更改它时,您都会手动将其保存为一个int,这样getInt就可以正常工作。
发布于 2011-08-31 21:37:42
android:defaultValue="0"
是一个字符串。
无法在首选项的xml中声明实际的int
https://stackoverflow.com/questions/7257232
复制相似问题