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
相关产品推荐
相关产品推荐

