0

您好,我是 android 的新手,我试图从 EditText 中获取整数值,但是当我将字符串解析为 Integer 时,我得到了 NumberFormatException。请帮助我摆脱这个错误。提前致谢。

程序是:

int day,month,year;
    EditText expense,ammount;
    String[] exp=new String[10];
    int[] amt=new int[10];
    int count=0;



    /** Called when the activity is first created. */
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Calendar cal=Calendar.getInstance();
        day=cal.get(Calendar.DAY_OF_MONTH);
        month=cal.get(Calendar.MONTH)+1;
        year=cal.get(Calendar.YEAR);


        final TextView txtdate=(TextView)findViewById(R.id.txtdate);

        expense=(EditText)findViewById(R.id.exp);
        ammount=(EditText)findViewById(R.id.amnt);


        final Button add=(Button)findViewById(R.id.btnadd);
        final Button cancel=(Button)findViewById(R.id.btncancel);
        final Button done=(Button)findViewById(R.id.btndone);



        txtdate.setText(day+"/"+month+"/"+year);

        add.setOnClickListener(new OnClickListener() {
            public void onClick(final View v) {

            getval(); 
            }

        });
        cancel.setOnClickListener(new OnClickListener() {
            public void onClick(final View v) {

                clean();



            }

        });
        done.setOnClickListener(new OnClickListener() {
            public void onClick(final View v) {

                total();
                getval();    
                clean();

       final TextView tv=(TextView)findViewById(R.id.textView1);
       tv.setText(Integer.toString(total()));
            }

            private int total() {
                int total = 0;

                // TODO Auto-generated method stub
                for(int i=0;i<=count;i++)
                {

                    total+=amt[i];

                }
                return total;

            }

        });

    }
    protected void clean() {
        // TODO Auto-generated method stub
        expense.setText(" ");
        ammount.setText(" ");

    }
    protected void getval() {
        // TODO Auto-generated method stub
         final Editable e2=expense.getText();
         final Editable e1=ammount.getText();

         final int i=Integer.parseInt(e1.toString());
         amt[count]=i;
         exp[count]=e2.toString();
         System.out.println(amt[count]);
         System.out.println(exp[count]);
         count++;

    }
}

例外是:

java.lang.NumberFormatException: unable to parse ' 600' as integer
4

5 回答 5

5

首先从数字中删除任何前导或尾随空格:

int inputNumber = Integer.parseInt(editText.getText().toString().trim());

或者,您可以使用正则表达式从字符串中删除所有非数字字符:

String cleanInput = editText.getText().toString().replaceAll("[^\\d]", "");
int inputNumber = Integer.parseInt(cleanInput);

虽然如果非数字输入字符是一个问题,您可能希望将 EditText 限制为仅数字。看到这个问题。它说要向 EditText 添加以下属性:

android:inputType="number"
于 2013-10-11T04:45:48.637 回答
1

你的整数中有一个空格。

将以下属性添加到您的 xml 中的 EditText 以仅允许输入整数:

android:inputType="number"
于 2013-10-11T04:44:36.147 回答
0

尝试这个..

final int i=Integer.parseInt(e1.toString().trim());

因为在那个数字之前有一个空格,所以看到' 600'这就是那个错误的原因..

希望这会有所帮助..

于 2013-10-11T04:43:46.750 回答
0

使用此代码

final int f = -1; // or other invalid value
if (edittext.getText().toString().length() > 0)
f = Integer.parseInt(edittext.getText().toString());
于 2013-10-11T04:44:03.720 回答
0

在edittext xml布局上使用这一行,

android:inputType="number"
于 2013-10-11T04:46:41.373 回答