捕获异常后继续(Android / Java)

时间:2015-08-07 12:07:36

标签: java android exception-handling

我想将输入字符串转换为long:

String inputStr = inputText.getText().toString();
Long inputNumber = Long.valueOf(inputStr);
// do something with inputNumber

但是,如果用户输入带字母的字符串,则valueOf()会抛出一些异常导致程序崩溃。

另一方面,如果我在valueOf()周围构建一个try-catch块,我得到一个"无法解析符号inputNumber"错误。如果我在块外面声明Long inputnumber,我得到一个"这个变量可能没有被初始化"错误。

我想在textView中输出错误消息,输入错误的inputStr,并像往常一样继续运行程序。怎么做?

2 个答案:

答案 0 :(得分:5)

在try / catch:

之外声明并初始化inputNumber
Long inputNumber = null;
try {
    inputNumber = Long.valueOf(inputStr);
}
catch (NumberFormatException e) {
    // handle exception
}

答案 1 :(得分:0)

我更喜欢使用 util class 并声明布尔方法并使用它来检查输入的数字是否为数字。这是可重复使用的代码。

public class StringUtil {

    public static boolean isNumeric(String str) {
        boolean returnVal = false;
        if (isNotEmpty(str)) {
            try {
                Long.parseLong(str);
                returnVal = true;
            } catch (NumberFormatException e) {
                returnVal = false;
            }
        }
        return returnVal;
    }
}

在你的方法中

String inputStr = inputText.getText().toString();
Long inputNumber = null;
if (StringUtil.isNumeric(inputStr)) {
    inputNumber = Long.valueOf(inputStr);
    // do something with inputNumber
} else {
     // either notify user or whatever you want to do.
}

如果您可以使用apache commons,那么您可以使用其NumberUtils.isNumber(String str)

String inputStr = inputText.getText().toString();
Long inputNumber = null;
if (NumberUtils.isNumber(inputStr)) {
    inputNumber = Long.valueOf(inputStr);
    // do something with inputNumber
}