SharedPreferences.getFloat()的意义是什么?

12
在Android的SharedPreferences API中,存在方法getFloat(),用于获取浮点数。然而,在xml中,即使定义了数字类型,EditTextPreference始终存储字符串值。

人们本来期望getFloat()自动返回浮点数,但是它却抛出ClassCastException异常,我们必须使用Float.parseFloat(SharedPreferences.getString())才能获取该值。
这意味着getFloat()没有任何用处吗?还是我理解有误?

1
如果我理解正确的话,关于存储编辑文本字段值,是的,您将它们存储为字符串,而不使用getFloat()。根据我的了解,getFloat()更多用于存储数学变量或甚至可能是GPS坐标。 - zgc7009
1个回答

10

getFloat()方法存在是为了从android的SharedPreferences API中获取浮点值。

是的。

然而,在xml中,EditTextPreference始终存储字符串值,即使定义为数字。

我觉得你在混淆事情。你把SharedPreferences设置为PreferenceScreen上的元素。

PreferenceScreen将所有值保存到您的SharedPreferences中,确实EditTextPreferences不能保存浮点数,但是您可以自己将浮点数保存到SharedPreferences中:

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putFloat("aFloat", 1.2f);
editor.commit();

然后像这样检索浮点数:

float someFloat = prefs.getFloat("aFloat", 0.0f);

3
啊哈!原来它有用处!虽然我仍然希望 getFloat() 在抱怨之前先尝试转换字符串。 - Molten Ice
只是出于兴趣的问题,没有办法立即进行测试,它是否会将1.2存储为浮点数,或者您需要使用1.2f显式声明它为浮点数? - zgc7009
@zgc7009 抱歉,当然应该是1.2f。谢谢,我已经更正了。 - Ahmad
SharedPreferences.getLong() 也会导致 ClassCastException - 我认为这些方法实际上是无用的。 - Price
@Price,你能给我精确的日志吗?这不应该发生。 - Ahmad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接