2013-01-24 17 views
2

我得到了一个属性,并保留在共享的参数中。共享首选项上的类抛出异常

有2个地方提到它在整个代码:

firstRunTimestamp = wmbPreference.getLong(ApplicationData.ParametersInternals.FIRST_RUN_DATE, 0); 

editor.putLong(ApplicationData.ParametersInternals.FIRST_RUN_DATE, new Date().getTime()); 

在我的日志,我发现这个异常

"java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong(" 

和栈表示该代码是访问该属性的方法内, 任何人都可以解释它甚至可能吗?

+0

是否有可能之前是一个字符串,并且在旧版本上安装了新版本? – auselen

回答

0

SharedPreference以键值对的形式存储所有数据。键和值都是字符串。 (如果明确值保存在SharedPreference为Long这是不正确的。检查我的答复如下。)

您需要从您的字符串解析长值

firstRunTimestamp = Long.parseLong(wmbPreference.getString(ApplicationData.ParametersInternals.FIRST_RUN_DATE, "0")); //Notice here, the default value is also made a string. 
+1

你从哪里学到的?任何参考? – auselen

+0

@auselen使用首选活动时,通常会发生这种情况。如果你明确地存储一个“长”,那么就没有问题了。我应该在我原来的评论中加入它。 – Supreethks

0

检查,如果你不”您的preference.xml中有相同的键值。请注意,在preference.xml中定义的首选项始终存储为String值。


另一个解决方案 - 如果你先定义一个首选项键从运行时int,后来你决定定义相同的密钥为String,它可以投一个ClassCastExcepion,虽然你已经改变了你的代码。这是因为此共享首选项文件中的这个键值为Int。为了避免这个delete shared preferences file, from your code or from your device depending on needs并重新安装你的应用程序。