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

Kotlin应用中NumberFormatException异常排查:同逻辑代码为何一正常一报错?

问题:同一安卓应用中第二个页面函数抛出NumberFormatException异常

Logcat错误输出

Process: com.example.barkod okuyucu, PID: 9955
java.lang.NumberFormatException: Invalid long: "9786257901444"
at java.lang.Long.invalidLong(Long.java:124)
at java.lang.Long.parse(Long.java:361)
at java.lang.Long.parseLong(Long.java:352)
at java.lang.Long.parseLong(Long.java:318)

正常运行的MainActivity2.kt代码

var barkod = intent.getStringExtra("m1")
binding.textView2.text = barkod.toString()
val context = this
var db = DataBaseHelper(context)
binding.button2.setOnClickListener {
    var etadi = binding.editTextText.text
    var etsnkullanmatrh = binding.editTextNumber.text
    var etadet = binding.editTextNumber2.text
    var etbarkod = binding.textView2.text
    if (etadi.isNotEmpty() && etsnkullanmatrh.isNotEmpty()) {
        var kullanici = Kullanici(etadi, etbarkod.toLong(), etsnkullanmatrh.toInt(), etadet.toInt())
        db.insertData(kullanici)
    } else {
        Toast.makeText(applicationContext, "lutfen", Toast.LENGTH_LONG).show()
    }
}

抛出异常的MainActivity3.kt代码

var barkod = intent.getStringExtra("n1")
binding.textView3.text = barkod
val context = this
var db = DataBaseHelper(context)
binding.button3.setOnClickListener {
    var etadi = binding.editTextText2.text
    var etsnkullanmatrh = binding.textView5.text
    var etadet = binding.editTextNumber4.text
    var etbarkod = binding.textView3.text
    if (etadi.isNotEmpty() && etsnkullanmatrh.isNotEmpty()) {
        var kullanici = Kullanici(etadi, etbarkod.toLong(), etsnkullanmatrh.toInt(), etadet.toInt())
        db.insertData(kullanici)
    } else {
        Toast.makeText(applicationContext, "lutfen", Toast.LENGTH_LONG).show()
    }
}

问题分析与解决方法

  1. 核心问题:etbarkod字符串无法转换为Long类型,表面看"9786257901444"是合法数字,但实际可能包含隐藏字符(如前后空格、全角字符、换行符),或是TextView文本处理逻辑导致字符串异常。
  2. 关键差异:MainActivity2设置TextView文本时调用了barkod.toString(),而MainActivity3直接赋值barkod。若barkod为null或携带隐藏格式,直接赋值会导致TextView文本包含异常内容。
  3. 修复步骤:
    • 统一文本设置逻辑:在MainActivity3中设置TextView文本时,同样调用toString():
      binding.textView3.text = barkod.toString()
      
    • 清理字符串格式:转换Long前先去除前后空格,同时用toLongOrNull()避免崩溃:
      val barkodLong = etbarkod.trim().toLongOrNull() ?: run {
          Toast.makeText(applicationContext, "条形码格式无效", Toast.LENGTH_SHORT).show()
          return@setOnClickListener
      }
      var kullanici = Kullanici(etadi, barkodLong, etsnkullanmatrh.toInt(), etadet.toInt())
      
    • 验证Intent参数:确认传递n1参数时是纯数字字符串,无额外字符或格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:15:11