我是Android的初学者,我正在学习一个应用程序来计算用户的BMI。但是,如果用户按下"计算"则应用程序崩溃按钮没有在重量和高度字段中输入任何内容。
我想我可以通过检查重量或高度字段是否为空来解决这个问题,如果它是真的则显示一条消息。但是,Android Studio告诉我"条件高度== null ||权重== null始终为假",应用程序仍然崩溃。
这是计算按钮代码的一部分:
private OnClickListener calculateListener = new OnClickListener() {
@Override
public void onClick(View v) {
String height = height.getText().toString();
String weight = weight.getText().toString();
float hValue = Float.valueOf(h);
if (height == null || weight == null) {
result.setText("Please enter your weight and your height");
} else {
//calculate BMI
float wValue = Float.valueOf(w);
if(group.getCheckedRadioButtonId() == R.id.radio2)
hValue = hValue / 100;
hValue = (float)Math.pow(hValue, 2);
float bmi = wValue / hValue;
result.setText("Your BMI is " + String.valueOf(bmi));
}
}
};
为什么告诉我这种情况总是错误的?如果字段中没有任何内容,那么值是否为空?
答案 0 :(得分:2)
如果字段中没有任何内容,则值是否为空?
如果字段中没有任何内容,则值为""
,而不是null
。
所以:
if (height.length() == 0 || weight.length() == 0) {
但您还需要防范用户输入内容的可能性,但无法通过捕获Float
将其转换为NumberFormatException
。 (我也可能使用Float.parseFloat
来获得float
而不是Float.valueOf
,这会给你一个Float
。)
同样,除非我非常误,否则显示的代码将无法编译。你有:
String height = height.getText().toString();
即使你有一个height
实例字段,
错误:可能尚未初始化变量高度
...和/或
错误:找不到符号
...因为height
将解析为本地,String
,并且没有getText()
。要使用实例字段,您需要YourClassName.this
:
String height = YourClassName.this.height.getText().toString();
......或者更好的是,只需使用不同的局部变量名称。
答案 1 :(得分:2)
使用以下
更改您的代码if (height.trim().equals("") || weight.trim().equals("")) {
result.setText("Please enter your weight and your height");
} else {
//calculate BMI
float wValue = Float.valueOf(w);
if(group.getCheckedRadioButtonId() == R.id.radio2)
hValue = hValue / 100;
hValue = (float)Math.pow(hValue, 2);
float bmi = wValue / hValue;
result.setText("Your BMI is " + String.valueOf(bmi));
}
答案 2 :(得分:1)
这是因为您在检查之前已经在使用字段,如:
String heightStr = height.getText().toString();//appened str
^^^^^^
String weightStr = weight.getText().toString();
^^^^^^
这意味着您的身高和体重在if条件下不能为空。在这种情况下,您需要先检查height
和weight
(如果它们可以为null),然后再使用getText
方法。如果需要,稍后可以检查heightStr
是否持有空字符串。
答案 3 :(得分:0)
if(height == null && height.isEmpty()) ||(weight == null && weight .isEmpty()))
{
result.setText("Please enter your weight and your height");
}
else {
//calculate BMI
float wValue = Float.valueOf(w);
if(group.getCheckedRadioButtonId() == R.id.radio2)
hValue = hValue / 100;
hValue = (float)Math.pow(hValue, 2);
float bmi = wValue / hValue;
result.setText("Your BMI is " + String.valueOf(bmi));
}