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

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格式的情况
}

关键修复点说明

  1. trim()处理:给字符串和拆分后的元素都加上trim(),避免文本中存在首尾空格导致转换失败。
  2. 长度校验:先判断拆分后的列表长度是否为2,从根源避免数组越界。
  3. 异常捕获:用try-catch包裹toLong()转换逻辑,捕获数字格式错误,防止应用崩溃。
  4. 毫秒计算:按照分钟*60 + 秒得到总秒数,再乘以1000转换为毫秒,符合CountdownTimer的初始化要求。

另外,建议在更新textTimer文本时,严格保证输出格式为mm:ss(比如两位数的分钟和秒),从源头减少格式错误的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:12:46