1

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

        }   
    }
4

2 回答 2

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(),如果在任何时候只设置一个字段,另一个字段将为空/空,因此将引发异常

于 2013-08-04T11:34:42.267 回答
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();
        }
于 2013-08-04T11:41:32.737 回答