Kotlin应用调用toLong()转换字符串时崩溃求助
解决toLong()转换崩溃问题
你的代码崩溃主要有两种可能原因,对应的修复方案如下:
可能的崩溃原因
- 数组越界异常:当
textTimer的文本不是mm:ss格式(比如没有冒号、格式错误),split(":")后得到的数组长度不足2,访问tmpList[1]会直接崩溃。 - 数字格式异常:拆分后的字符串包含非数字字符(比如空格、特殊符号),调用
toLong()时会抛出NumberFormatException。
修复后的代码
val actualTimer = binding.textTimer.text.toString().trim() val tmpList = actualTimer.split(":") // 先校验格式合法性 if (tmpList.size == 2) { try { val minutes = tmpList[0].trim().toLong() val seconds = tmpList[1].trim().toLong() val totalMillis = (minutes * 60 + seconds) * 1000 // 在这里初始化CountdownTimer } catch (e: NumberFormatException) { // 处理数字格式错误,比如提示用户输入合法时间 e.printStackTrace() } } else { // 处理格式错误,比如文本不符合mm:ss格式的情况 }
关键修复点说明
- trim()处理:给字符串和拆分后的元素都加上
trim(),避免文本中存在首尾空格导致转换失败。 - 长度校验:先判断拆分后的列表长度是否为2,从根源避免数组越界。
- 异常捕获:用
try-catch包裹toLong()转换逻辑,捕获数字格式错误,防止应用崩溃。 - 毫秒计算:按照
分钟*60 + 秒得到总秒数,再乘以1000转换为毫秒,符合CountdownTimer的初始化要求。
另外,建议在更新textTimer文本时,严格保证输出格式为mm:ss(比如两位数的分钟和秒),从源头减少格式错误的可能。
内容的提问来源于stack exchange,提问作者Freder Dew
相关产品推荐
相关产品推荐

