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

Android Kotlin开发中EditText内容转Int报NumberFormatException如何解决

错误原因
  • 核心报错为java.lang.NumberFormatException: For input string: "",本质是尝试将空字符串转换为Int类型失败
  • 你将读取EditText内容并转Int的逻辑写在了onCreate生命周期方法中,此时Activity刚完成布局加载,用户还未进行任何输入,EditText默认内容为空字符串,直接调用toInt()就会抛出格式转换异常导致闪退
  • 额外逻辑问题:即使后续用户输入了内容,你提前在onCreate中读取的X1、Y1还是初始的旧值,点击按钮计算时永远用的是启动时的数值,无法响应用户的输入修改
修复方案
  1. 将读取EditText内容并转换的逻辑移动到按钮点击事件的回调内部,每次点击按钮时再读取当前最新的输入内容
  2. 使用Kotlin提供的安全转换方法toIntOrNull()替代toInt(),当输入为空、非数字格式时会返回null而非直接抛出异常,同时增加非法输入的提示逻辑
修复后完整代码
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val X: EditText = findViewById(R.id.num12)
        val Y: EditText = findViewById(R.id.num2)
        val B: Button = findViewById(R.id.btn1)
        val vir: TextView = findViewById(R.id.virw)

        B.setOnClickListener {
            // 每次点击时读取最新输入内容,安全转换
            val X1 = X.text.toString().toIntOrNull()
            val Y1 = Y.text.toString().toIntOrNull()
            if (X1 != null && Y1 != null) {
                // 两个输入都是合法数字,正常计算
                vir.text = "add new ${addtwonumber(X1, Y1)}"
            } else {
                // 输入非法,给出提示
                vir.text = "请输入合法的数字"
            }
        }
    }
    
    private fun addtwonumber(a:Int, b:Int): Int {
        return a + b
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:08