【问题标题】:Editable to string Crash可编辑到字符串崩溃
【发布时间】:2014-04-07 08:44:39
【问题描述】:

我编写了这段代码,当我尝试将可编辑的值转换为整数时,程序崩溃了,因为它输入的文本是十进制的,我怀疑它是在应用程序必须将可编辑的值更改为字符串的时候,因为事实上,当编辑文本后编辑文本为空时,它会崩溃。

EditText Y = (EditText) findViewById(R.id.y);
        Y.addTextChangedListener(new TextWatcher(){
            @Override
            public void afterTextChanged(Editable s) {
                if(s != null){
                    int Yvalue = Integer.parseInt(s.toString());
                }
            }

【问题讨论】:

  • Y 为 null 或 Integer.parseInt 失败
  • 也许使用try-catch?尝试 { int Yvalue = Integer.parseInt(s); } catch (Exception e) { // 无法解析 }
  • Integer.parseInt()EditText 中提供小数点时会抛出 NumberFormatException
  • 您的问题不清楚。您希望能够处理带小数位的数字(即将它们读取为浮点数)还是希望更好地处理错误情况?

标签: java android crash android-edittext


【解决方案1】:

在我看来,在将 String 解析为 Integer 时应该发生 NumberFormatException 的可能性更大。尝试将它包含在该异常的 try/catch 中。

 try {
   Yvalue = Integer.parseInt(number);
 } catch (NumberFormatException e) {
   Yvalue = defaultVal; // or do whatever necessary
 }

【讨论】:

  • 当编辑文本无法转换为浮动应用程序崩溃时,除非尝试一下,否则显然可以完美运行。谢谢
【解决方案2】:

尝试将字符串的值解析为float并在float变量中获取

float Yvalue = Float.parseFloat(s.toString());

【讨论】:

    【解决方案3】:

    假设您只想要整数,请尝试以下操作:

    @Override
    public void afterTextChanged(Editable s) {
    
      if (s.length() == 0) {
        // complain about no input
      } else {
        try {
          int yValue = Integer.parseInt(s.toString());
    
          // ...
    
        } catch (NumberFormatException e) {
          // complain about invalid input
        }
      }
    }
    

    我不是 Android 开发人员,但如果没有办法在您的输入字段中添加掩码以防止输入除整数以外的任何内容,我会感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-21
      • 2019-01-23
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多