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

本文详细解析了在使用SharedPreferences的getLong方法时遇到的类型转换异常问题,通过分析问题根源,发现是由于Key值错误导致数据类型不匹配,最终通过修正Key值解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值