将 String 转换为 Int 时 Try-Catch 中的 NumberFormatException
NumberFormatException in Try-Catch while converting String to Int
我试图在 try-catch 块中将 String 转换为 Int。在我的例子中,如果单击按钮,textview 中的数字将从 String 转换为 Int。当我使用 OnclickListener 时它正在工作,我什至不需要使用 try-catch。但是对于 OnkeyListener,我得到 "numberformatexception:invalid int" 错误。
我什至尝试使用 try-catch。但它仍然向我显示此错误。我真的不明白为什么它适用于 OnClickListener 但不适用于 OnKeyListener。这是我的代码-
var ID = findViewById<EditText>(R.id.edt_id)
btn_add.setOnClickListener {
val item=Item(
Integer.parseInt(edt_id.text.toString()),
Integer.parseInt(quan.toString()),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
master_record.toString().toInt()
)
db.addItem(item)
refreshData()
edt_id.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action ==
KeyEvent.ACTION_UP) {
//Perform Code
val ii:String = ID.text.toString()
var id:Int = 0
try {
id = Integer.parseInt(ii)
println(id!!)
Integer.parseInt(quan.toString())
Integer.parseInt(record_code.toString())
println("GG")
edt_id.text.toString()
val item=Item(
id,
Integer.parseInt(quan.toString()),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
Integer.parseInt(record_code.toString())
)
db.addItem(item)
refreshData()
edt_id.text=null
edt_id.requestFocus()
true}
catch (nfe:NumberFormatException )
{ nfe.printStackTrace() }
}
false
})
如果您使用的是 Kotlin,最安全的方法是使用 toIntOrNull()
例如:
"10".toIntOrNull()
如果字符串不是数字,它将 return 改为 null。在此之后,您可以使用 elvis 运算符检查数字是否为空,然后 return 另一个值:
val number = "ten".toIntOrNull() ?: 0
// "ten" is non number, will return null instead,
// then catch the null with elvis operator ?: and fall back to default value 0
你也可以让你的代码变得更简单,比如:
val item=Item(
ID.text.toIntOrNull() ?: 0,
quan.toString().toIntOrNull() ?: 0),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
record_code.toString().toIntOrNull() ?: 0
)
db.addItem(item)
refreshData()
edt_id.text=null
edt_id.requestFocus()
true
我试图在 try-catch 块中将 String 转换为 Int。在我的例子中,如果单击按钮,textview 中的数字将从 String 转换为 Int。当我使用 OnclickListener 时它正在工作,我什至不需要使用 try-catch。但是对于 OnkeyListener,我得到 "numberformatexception:invalid int" 错误。 我什至尝试使用 try-catch。但它仍然向我显示此错误。我真的不明白为什么它适用于 OnClickListener 但不适用于 OnKeyListener。这是我的代码-
var ID = findViewById<EditText>(R.id.edt_id)
btn_add.setOnClickListener {
val item=Item(
Integer.parseInt(edt_id.text.toString()),
Integer.parseInt(quan.toString()),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
master_record.toString().toInt()
)
db.addItem(item)
refreshData()
edt_id.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action ==
KeyEvent.ACTION_UP) {
//Perform Code
val ii:String = ID.text.toString()
var id:Int = 0
try {
id = Integer.parseInt(ii)
println(id!!)
Integer.parseInt(quan.toString())
Integer.parseInt(record_code.toString())
println("GG")
edt_id.text.toString()
val item=Item(
id,
Integer.parseInt(quan.toString()),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
Integer.parseInt(record_code.toString())
)
db.addItem(item)
refreshData()
edt_id.text=null
edt_id.requestFocus()
true}
catch (nfe:NumberFormatException )
{ nfe.printStackTrace() }
}
false
})
如果您使用的是 Kotlin,最安全的方法是使用 toIntOrNull()
例如:
"10".toIntOrNull()
如果字符串不是数字,它将 return 改为 null。在此之后,您可以使用 elvis 运算符检查数字是否为空,然后 return 另一个值:
val number = "ten".toIntOrNull() ?: 0
// "ten" is non number, will return null instead,
// then catch the null with elvis operator ?: and fall back to default value 0
你也可以让你的代码变得更简单,比如:
val item=Item(
ID.text.toIntOrNull() ?: 0,
quan.toString().toIntOrNull() ?: 0),
edt_name.text.toString(),
name.toString(),
date_record.toString(),
location_record.toString(),
record_code.toString().toIntOrNull() ?: 0
)
db.addItem(item)
refreshData()
edt_id.text=null
edt_id.requestFocus()
true