[英]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。 Editexts weight 和 meter 的输入类型是 numberDecimal,meter,feet 是 number。 错误是:java.lang.NumberFormatException:对于输入字符串:“com.google.android.material.textfield.TextInputEditText{b7d8c80 VFED..CL......... 0,0-385,153 #7f0800cc 应用程序: id/inches_edit_text 辅助 = 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.