java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong(Share
今天在开发过程中遇到一个问题:从Git上拉下代码后,点击登录程序就崩溃了,而且是必现。贴下打印的Log
打码的地方是公司代码中的包名,不影响显示问题。
可以看到最关键的两句:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at android.app.SharedPreferencesImpl.getLong(SharedPreferencesImpl.java:247)
解释就是在调用SharedPreferencesImpl的getLong方法时,发生了类型错误,不能将String类型转成Long类型。其原型定义为:
getLong(String,long)
代码中的参数也对,让我查了许久。后来百度并查找了下来源,最后问题得以解决。
首先,SharedPreferences是一种类似共享内存的方式,getLong是在取数据,那么它的源头就是先存数据了。这是顺理成章的过程。
然后,再理解getLong的两个参数。第一个参数为String类型,其代表Key;第二个参数为Long类型,其代表getLong的默认返回值。
最后,问题的关键找到了。问题出在Key上。
代码中的Key值拷贝错了。应该选VALUES_KEY_REGION_CODE_TIME;而当前的Key值是VALUES_KEY_REGION_CODE;这与上面的存String类型的Key一样,所以当调用getLong方法是,根据其Key值取到的数据类型为String。固而报String cannot be case to long.
解决方案为:把Key改过来及可。
重点:参考文献如下(感谢作者)
https://bbs.****.net/topics/391020435