You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中计算年份差值时应用崩溃问题求助

问题分析与解决建议

你的代码崩溃的核心原因很明确:Spinner的getSelectedItem()返回的是字符串类型(Spinner默认加载的是文本选项),直接用as Int强转会抛出ClassCastException,这就是App崩溃的根源。

直接修复代码

把强转改成字符串转Int的正确方式:

val year: Int = spinYear.getSelectedItem().toString().toInt()
selDate.text = "$year / $month / $date"
val curTime = LocalDateTime.now()
val curYear: Int = curTime.year
val difYear: Int = curYear - year
ageInMins.text = difYear.toString()

额外安全优化

如果担心Spinner选项出现非数字内容(比如自定义选项时的异常情况),可以加个安全处理避免崩溃:

val yearStr = spinYear.getSelectedItem().toString()
val year = yearStr.toIntOrNull() ?: run {
    // 转换失败时的处理逻辑,比如提示用户
    ageInMins.text = "请选择有效年份"
    return@yourFunctionName // 终止后续代码执行
}
// 正常逻辑继续执行
selDate.text = "$year / $month / $date"
val curYear = LocalDateTime.now().year
val difYear = curYear - year
ageInMins.text = difYear.toString()

为什么强转不行?

如果你的Spinner是通过字符串数组(比如XML里的entries属性)设置的选项,选中项的实际类型就是String,直接用as Int属于类型不匹配,JVM会直接抛出类型转换异常,导致App崩溃。而toString().toInt()是先把对象转为字符串,再解析成Int,这才是符合数据类型逻辑的转换方式。

内容的提问来源于stack exchange,提问作者gorilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:25:39