我得到了一个房产,坚持共同的推荐。
整个代码中有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 :(得分: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并重新安装您的应用。