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

时间:2015-12-14 20:18:29

标签: android sharedpreferences

我在[{1}}中保存的值为SharedPreferences。我尝试在设计更改后将其保存为float,但我得到int。当我尝试加载此值时抛出异常。

违规行:ClassCastException

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

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

3 个答案:

答案 0 :(得分:5)

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

呼叫

Editor.remove(String key);

然后设置你的价值。

这还取决于你想要达到的目标。如果你想存储' int'在设置中,然后存储一个'浮动'然后' int'不,答案是否定的,绝对不要这样!

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

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

答案 1 :(得分:1)

在我的情况下,我的应用已经发布,并且无法更改For odd lettered string the counter should be back to 1 and for even it should hit 0.I hope this approach is right. See below the snippet. s->refers to string eg: String s="abbcaddc"; Hashtable<Character,Integer> textMap= new Hashtable<Character,Integer>(); char charA[]= s.toCharArray(); for(int i=0;i<charA.length;i++) { if(!textMap.containsKey(charA[i])) { textMap.put(charA[i], ++count); } else { textMap.put(charA[i],--count); } if(length%2 !=0) { if(count == 1) System.out.println("(odd case:PALINDROME)"); else System.out.println("(odd case:not palindrome)"); } else if(length%2==0) { if(count ==0) System.out.println("(even case:palindrome)"); else System.out.println("(even case :not palindrome)"); } 的旧类型,我必须使用SharedPreference try-catch

来围绕通话

答案 2 :(得分:0)

在这种情况下可以使用另一个键。对我来说看起来更安全。如果您使用相同的密钥,则必须在放置新值之前将Editor.remove(String key);放在任何位置。而且你必须记住,你不能只调用getInt()方法而不将它包装到try-catch中。对于稍后编辑代码的人来说可能并不明显。