我是SO的新手,也是Java的新手,所以请不要讨厌我。 我有多个editText框,应该像excel电子表格一样运行。以下是这个简单应用程序的一些代码:
EditText tradeDif = (EditText) findViewById(R.id.tradeDif);
TextWatcher tradeWatch = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
calcTrade();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
};
private void calcTrade() throws NumberFormatException {
Editable eValue1 = newPrice.getText(), eValue2 = tradeIn.getText(), eValue3 = acc.getText();
Double value1 = 0.0, value2 = 0.0, value3 = 0.0, result = 0.0;
if (eValue1 != null)
value1 = Double.parseDouble(eValue1.toString());
if (eValue2 != null)
value2 = Double.parseDouble(eValue2.toString());
if (eValue3 != null)
value3 = Double.parseDouble(eValue3.toString());
if (value1 != null && value2 != null && value3 != null)
result = value1 - (value2 + value3);
tradeDif.setText(result.toString());
}
EditText字段TradeDif需要能够显示变量结果。当我运行它崩溃时,我认为它是因为tradeDif editText是空的。此外,我需要能够使用tradeDif EditText中显示的内容进一步使用editTexts进行计算。我假设我需要使用某种try catch块,但我有点不确定如何实现它。任何帮助表示赞赏。
答案 0 :(得分:1)
使用try / catch包围if语句,并正确处理失败:
try {
if (eValue1 != null)
value1 = Double.parseDouble(eValue1.toString());
if (eValue2 != null)
value2 = Double.parseDouble(eValue2.toString());
if (eValue3 != null)
value3 = Double.parseDouble(eValue3.toString());
if (value1 != null && value2 != null && value3 != null)
result = value1 - (value2 + value3);
tradeDif.setText(result.toString());
} catch (NumberFormatException e) {
// Not a number in one of the fields, alert user
}
答案 1 :(得分:1)
Double.parseDouble()
不包含有效的double值,则 String
会抛出NumberFormatException。这包括空字符串。
要传递该错误,我建议通过创建新方法检查字符串是否为空:
private double toDouble(final Editable editable) {
final String content = editable.toString();
if (content.isEmpty()) {
return 0;
}
return Double.parseDouble(content);
}
然后将您的代码更改为:
if (eValue1 != null)
value1 = toDouble(eValue1);
if (eValue2 != null)
value2 = toDouble(eValue2);
if (eValue3 != null)
value3 = toDouble(eValue3);
新方法避免了代码加倍,并且可以轻松维护。
你也可以考虑捕捉异常,但我更喜欢首先避开它们。特别是出于这种原因(空字符串)。