【问题标题】:Continue after catching exception (Android/Java)捕获异常后继续(Android/Java)
【发布时间】:2015-08-07 12:07:36
【问题描述】:

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

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

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

另一方面,如果我围绕 valueOf() 构建一个 try-catch 块,我会收到“无法解析符号 inputNumber”错误。如果我在块外声明 Long inputnumber,则会收到“此变量可能未初始化”错误。

我只想在 textView 中为不正确的 inputStr 输出一条错误消息,然后像往常一样继续程序。如何做到这一点?

【问题讨论】:

标签: java android exception-handling


【解决方案1】:

在 try/catch 之外声明并初始化 inputNumber:

Long inputNumber = null;
try {
    inputNumber = Long.valueOf(inputStr);
}
catch (NumberFormatException e) {
    // handle exception
}

【讨论】:

    【解决方案2】:

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

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-01
      • 1970-01-01
      • 2011-02-07
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多