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

Kotlin安卓开发:点击按钮后App崩溃,抛出NumberFormatException异常

问题根因

报错日志明确抛出java.lang.NumberFormatException: For input string: "",核心原因是原代码的空值判断逻辑存在漏洞:DenaryInput.text本身永远不会为null,仅判断它非空完全无法拦截用户没有输入的场景,此时调用toString()会得到空字符串,再调用toInt()就会直接触发格式异常导致闪退。此外代码中大量使用!!强制解包可空变量,也存在空指针崩溃的风险。

修复后可直接运行的代码
import kotlinx.android.synthetic.main.activity_main.*

button.setOnClickListener {
    // 提取输入内容并去除前后空白字符
    val inputContent = DenaryInput.text.toString().trim()
    // 尝试转换为整数,转换失败返回null不会抛出异常
    val denaryNum = inputContent.toIntOrNull()
    
    if (denaryNum != null) {
        var temp = denaryNum
        var binResult = ""
        // 处理输入为0的边界场景
        if (temp == 0) {
            binResult = "0"
        } else {
            while (temp > 0) {
                binResult += (temp % 2).toString()
                temp /= 2
            }
            binResult = binResult.reversed()
        }
        textView.text = binResult
    } else {
        // 非法输入给出友好提示,避免闪退
        textView.text = "请输入有效的十进制整数"
    }
}
核心优化点说明
  • 替换toInt()为toIntOrNull():转换失败时直接返回null,不会抛出崩溃异常,通过非空判断即可拦截所有非法输入
  • 修正了无效的空值判断逻辑:直接对输入内容做非空、格式合法性校验,覆盖空输入、非数字输入等所有异常场景
  • 移除不必要的可空变量声明与!!强制解包操作:从根源避免空指针崩溃风险,同时简化代码逻辑
  • 补充0值输入的边界处理:原逻辑输入0时不会进入循环,会输出错误结果
  • 增加非法输入的友好提示:用户输入不符合要求时会得到明确反馈,不会无响应或闪退

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:15:03