无效长:“”例外

时间:2013-08-04 11:21:37

标签: android numberformatexception

我有2个编辑文本字段ETPredictKm(长值)和ETPredictFuelQty(双值)。如果我插入一个值,则当我单击相应的EditText时,另一个值会自动生成。我正在使用onFocusListener。我的问题是,当我插入km值来计算fuelQty时,它会被正确计算出来。但是当我输入燃料数量并点击ETPredictKm时,我得到了无效的长:“”例外。

请帮助我提出建议。 谢谢。

这里有一些代码:

 try
     {
        predictKm = Long.parseLong(ETPredictKm.getText().toString()); //Get the error here
        predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString());
    }
    catch(NumberFormatException ne)
    {
        ne.printStackTrace();
    }
    if(isChkLastMileage1 ==true || isChkLastMileage5==true||isChkLastMileage10==true)
    {

        if(ETPredictKm.hasFocus())
        {
           if(predictFuelQty!=0)
            {
                  //predictionMileage is double too
              predictKm =(long) (predictionMileage*predictFuelQty);
              ETPredictKm.setText(String.valueOf(predictKm));

            }
        }
      else if(ETPredictFuelQty.hasFocus())
        {
            // This value is calculated properly            
           if(predictKm!=0)
             {
            predictFuelQty =predictKm/predictionMileage;
        ETPredictFuelQty.setText(new DecimalFormat("##.##").format(predictFuelQty)+" Litres");
             }

        }   
    }

2 个答案:

答案 0 :(得分:1)

您可能希望在转换为long / double之前修剪空格,如下所示

try
     {
        predictKm = Long.parseLong(ETPredictKm.getText().toString().trim()); //Get the error here
        predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString().trim());
    }
    catch(NumberFormatException ne)
    {
        ne.printStackTrace();
    }

在转换数据类型转换之前对ETPredictFuelQty.getText()ETPredictKm.getText()进行null / empty检查,如果在任何点只设置了一个字段,另一个将为null / empty,并且因此会抛出异常

答案 1 :(得分:0)

好的,所以我通过将两个解析语句放入不同的try-catch块来实现这一点。像这样: -

try
        {
            predictKm = Long.parseLong(ETPredictKm.getText().toString().trim());

        }
        catch(NumberFormatException ne)
        {
            ne.printStackTrace();
        }
        try
        {
            predictFuelQty = Double.parseDouble(ETPredictFuelQty.getText().toString().trim());
        }
        catch(NumberFormatException ne)
        {
            ne.printStackTrace();
        }