共享首选项上的类转换异常

时间:2013-01-24 10:10:00

标签: android

我得到了一个房产,坚持共同的推荐。

整个代码中有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("

堆栈表明此代码位于访问此属性的方法内部, 任何人都可以解释它是如何可能的吗?

2 个答案:

答案 0 :(得分:1)

SharedPreference以键值对的形式存储所有数据。键和值都是字符串。 (如果您将值显式存储为SharedPreference为Long,则情况并非如此。请查看下面的回复。)

您需要将字符串中的Long值解析为

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

答案 1 :(得分:0)

检查preference.xml中是否没有使用相同键值的偏好设置。请注意,preference.xml中定义的首选项始终存储为String值。

另一个解决方案 - 如果您首先从运行时将首选项键定义为int,稍后您决定将同一个键定义为String,则可以转换ClassCastExcepion,虽然您已经更改了代码。这是因为共享首选项中的关键值为Int。要避免此delete shared preferences file, from your code or from your device depending on needs并重新安装您的应用。