EditText用于输入和输出

时间:2014-10-16 21:48:05

标签: java android android-edittext numberformatexception

我是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块,但我有点不确定如何实现它。任何帮助表示赞赏。

2 个答案:

答案 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);

新方法避免了代码加倍,并且可以轻松维护。

你也可以考虑捕捉异常,但我更喜欢首先避开它们。特别是出于这种原因(空字符串)。