输入字符串 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