Android 我可以安全地更改SharedReferences变量的类型吗?

Android 我可以安全地更改SharedReferences变量的类型吗?,android,sharedpreferences,Android,Sharedpreferences,我在SharedReferences中保存了一个值,它是一个float。在一些设计更改之后,我试图将其保存为int,但我得到了ClassCastException。尝试加载此值时引发异常 有问题的行:preferences.getInt(myKey,myDefaultValue) 更改自:preferences.getFloat(myKey,myDefaultValue)` 是否有一种安全的方法可以从该键加载并覆盖该值,而无需清除缓存?或者我需要创建一个全新的密钥吗?您应该首先从首选项中删除该值

我在
SharedReferences
中保存了一个值,它是一个
float
。在一些设计更改之后,我试图将其保存为
int
,但我得到了
ClassCastException
。尝试加载此值时引发异常

有问题的行:
preferences.getInt(myKey,myDefaultValue)

更改自:preferences.getFloat(myKey,myDefaultValue)`


是否有一种安全的方法可以从该键加载并覆盖该值,而无需清除缓存?或者我需要创建一个全新的密钥吗?

您应该首先从首选项中删除该值

召唤

然后设定你的价值

这也取决于你想要达到的目标。如果您试图在设置中存储'int',然后在那里存储'float',然后再存储'int',答案是否定的,千万不要这样做

如果您只是在开发过程中在任何生产之前更改了变量类型,那么您可以只清除应用程序数据并使用新变量,而无需在代码中清除它


但是,如果您已经部署了应用程序,现在想要更改变量类型,那么可以这样做并使用.remove()方法。

在我的情况下,我的应用程序已经发布,无法更改旧类型的
共享引用
我必须用
try catch
环绕调用,以便
ClassCastException
在这种情况下可以使用另一个键。对我来说更安全。如果使用相同的键,则必须放入
Editor.remove(字符串键)无处不在。您必须记住,您不能只调用
getInt()
方法而不将其包装以尝试捕获。对于稍后编辑代码的人来说,这可能并不明显。

您可以获取浮点值,然后将其转换为int,但在以后的版本中不需要,因为您已经更改了设计,因此,请删除应用程序或清除数据。@Gonzalo问题是,如果应用程序已经发布,我不希望每个用户在重新使用应用程序之前卸载然后重新安装应用程序,或清除他们的缓存。我以为你正在调试,尚未发布。因此,为
SharedReferences
创建一个新密钥并放弃旧密钥是正确的解决方案吗?@h_k,这取决于你试图实现的目标。如果您试图在设置中存储int,然后在那里存储一个浮点,然后再存储int,答案是NO,千万不要这样做!保存到首选项的值始终为浮点值。但是现在我想在以后的版本中切换到整数。@h_k,但是如果您只是永久更改了变量类型,那么您可以只清除应用程序数据并使用新变量,而无需清除它。@h_k,但是如果您已经部署了应用程序,现在想更改变量类型,那么可以,您可以这样做并使用.remove()方法。
Editor.remove(String key);