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