java.lang.String cannot be cast to java.lang.Long at android.app.SharedPreferencesImpl.getLong(Share

版权声明:出于感谢(如果有收获)或对知识的尊重,未经允许禁止转载 https://blog.csdn.net/bendan50/article/details/82707164

今天在开发过程中遇到一个问题:从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.csdn.net/topics/391020435

猜你喜欢

转载自blog.csdn.net/bendan50/article/details/82707164