输入字符串 Edittext 的 NumberFormatException
NumberFormatException for input string Edittext
var bmi: Float
if(binding.rbMetric.isChecked){
bmi = binding.currWeightEdit.text.toString().toFloat() / binding.meterEditText.toString().toFloat().pow(2)
}else{
bmi = (binding.currWeightEdit.text.toString().toFloat()*703)/ (binding.feetEditText.text.toString().toInt()*12 + binding.inchesEditText.toString().toInt()).toFloat().pow(2)
}
return bmi
此代码用于计算公制或英制单位的 BMI。 Edittexts weight 和 meter 的输入类型是 numberDecimal 和 meter,feet 是 number。错误是:java.lang.NumberFormatException: For input string: "com.google.android.material.textfield.TextInputEditText{b7d8c80 VFED..CL. ....... 0,0-385,153 #7f0800cc app:id/inches_edit_text aid =1073741832}”。我该如何解决这个问题?
关于您使用的第一个计算
binding.meterEditText.toString().toFloat().pow(2)
什么时候应该
binding.meterEditText.text.toString().toFloat().pow(2)
所以它在 EditText 视图本身上调用 toString()
。您在使用 toInt()
.
的地方进一步重复了此错误
为了减少此代码的重复性和错误率,您可以使用扩展。此外,当反复使用 binding
时,使用 with(binding)
.
更干净
val TextView.textAsFloat: Float get() = text.toString().toFloat()
return with(binding) {
if (rbMetric.isChecked) {
currWeightEdit.textAsFloat / meterEditText.textAsFloat.pow(2)
} else {
currWeightEdit.textAsFloat * 703 / (feetEditText.textAsFloat * 12 + inchesEditText.textAsFloat).pow(2)
}
}
更新您的代码,您正在以错误的方式获取 editText 输入。
var bmi: Float
if(binding.rbMetric.isChecked){
//replace below line in your actual code
binding.meterEditText.text.toString().toFloat().pow(2)
bmi = binding.currWeightEdit.text.toString().toFloat() / binding.meterEditText.toString().toFloat().pow(2)
}else{
//replace below line in your actual code
binding.inchesEditText.text.toString().toInt()).toFloat().pow(2)
bmi = (binding.currWeightEdit.text.toString().toFloat()*703)/ (binding.feetEditText.text.toString().toInt()*12 + binding.inchesEditText.toString().toInt()).toFloat().pow(2)
}
return bmi
var bmi: Float
if(binding.rbMetric.isChecked){
bmi = binding.currWeightEdit.text.toString().toFloat() / binding.meterEditText.toString().toFloat().pow(2)
}else{
bmi = (binding.currWeightEdit.text.toString().toFloat()*703)/ (binding.feetEditText.text.toString().toInt()*12 + binding.inchesEditText.toString().toInt()).toFloat().pow(2)
}
return bmi
此代码用于计算公制或英制单位的 BMI。 Edittexts weight 和 meter 的输入类型是 numberDecimal 和 meter,feet 是 number。错误是:java.lang.NumberFormatException: For input string: "com.google.android.material.textfield.TextInputEditText{b7d8c80 VFED..CL. ....... 0,0-385,153 #7f0800cc app:id/inches_edit_text aid =1073741832}”。我该如何解决这个问题?
关于您使用的第一个计算
binding.meterEditText.toString().toFloat().pow(2)
什么时候应该
binding.meterEditText.text.toString().toFloat().pow(2)
所以它在 EditText 视图本身上调用 toString()
。您在使用 toInt()
.
为了减少此代码的重复性和错误率,您可以使用扩展。此外,当反复使用 binding
时,使用 with(binding)
.
val TextView.textAsFloat: Float get() = text.toString().toFloat()
return with(binding) {
if (rbMetric.isChecked) {
currWeightEdit.textAsFloat / meterEditText.textAsFloat.pow(2)
} else {
currWeightEdit.textAsFloat * 703 / (feetEditText.textAsFloat * 12 + inchesEditText.textAsFloat).pow(2)
}
}
更新您的代码,您正在以错误的方式获取 editText 输入。
var bmi: Float
if(binding.rbMetric.isChecked){
//replace below line in your actual code
binding.meterEditText.text.toString().toFloat().pow(2)
bmi = binding.currWeightEdit.text.toString().toFloat() / binding.meterEditText.toString().toFloat().pow(2)
}else{
//replace below line in your actual code
binding.inchesEditText.text.toString().toInt()).toFloat().pow(2)
bmi = (binding.currWeightEdit.text.toString().toFloat()*703)/ (binding.feetEditText.text.toString().toInt()*12 + binding.inchesEditText.toString().toInt()).toFloat().pow(2)
}
return bmi