NumberFormatException:无效的int" - "

时间:2014-06-26 10:02:34

标签: java android xml

我有一个问题。我有一个具有android:inputType="numberDecimal|numberSigned"的EditText。在Java代码中我有这个

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
                int value = 0;
                String editContent = editText.getText().toString();
                if(editContent != null && editContent.length() > 0) {
                    value = Integer.parseInt(editContent);
                } 
                seekBar.setProgress(value);
            }

当我尝试插入负数时,我有一个NumberFormatException无效的int“ - ”。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:0)

在EditText的布局中添加:

android:digits="0123456789-."

答案 1 :(得分:0)

第一次放入" - "时,将调用方法onTextChanged,解析将在" - "上完成,即不是有效的int。 因此,如果字符串是" - "。

,则需要转义解析

将以下代码用于onTextChanged(...) 最好将此代码移至afterTextChanged(...)

int value = 0;
if (! TextUtils.isEmpty(arg0)) {
    String text = arg0.toString();
    if ("-".equals(text)) {
        // Nothing to do
    } else {
        value = Integer.parseInt(text);
    }
    seekBar.setProgress(value);
}

答案 2 :(得分:0)

试试这个

 @Override
 public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
   // TODO Auto-generated method stub
   int value = 0;
   String editContent = editText.getText().toString();
   if(editContent != null && editContent.length() > 0 && !editContent.equals("-")) {
     value = Integer.parseInt(editContent);
   } 
     seekBar.setProgress(value);
  }

在输入每个字符后调用onTextChanged时,尝试解析" - "字符作为整数,导致异常。使用修改后的代码,您将在这些情况下将值设置为0.

答案 3 :(得分:0)

这是因为无法从"-"字符串解析整数。 您可以添加try-catch块:

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            try{
                int value = 0;
                String editContent = editText.getText().toString();
                if(editContent != null && editContent.length() > 0) {
                    value = Integer.parseInt(editContent);
                } 
                seekBar.setProgress(value);
            }catch(NumberFormatException ex){
            }
        }

或使用if构造:

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            int value = 0;
            String editContent = editText.getText().toString();

            if(editContent != null && !editContent.equals("-")){
                if(editContent != null && editContent.length() > 0) {
                    value = Integer.parseInt(editContent);
                } 
                seekBar.setProgress(value);
            }
        }

答案 4 :(得分:0)

添加一项检查以查看editContent是否以 -

开头
@Override
 public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub
  int value = 0;
  String editContent = editText.getText().toString();

  if(editContent != null && editContent.length() > 0 && !editContent.startsWith("-")) 
  {
      value = Integer.parseInt(editContent);
  } 
  seekBar.setProgress(value);
 }