字符串不能为空?

时间:2016-01-19 06:47:38

标签: java android null

我是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));
            }
    }
};

为什么告诉我这种情况总是错误的?如果字段中没有任何内容,那么值是否为空?

4 个答案:

答案 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条件下不能为空。在这种情况下,您需要先检查heightweight(如果它们可以为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));
        }