无法从EditText获取整数

时间:2013-10-11 04:38:08

标签: android

您好我是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

5 个答案:

答案 0 :(得分:5)

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

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

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

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

虽然如果非数字输入字符出现问题,您可能希望将EditText限制为仅数字。见this question。它说要将以下属性添加到EditText:

android:inputType="number"

答案 1 :(得分:1)

整数中有空格。

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

android:inputType="number"

答案 2 :(得分:0)

试试这个..

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

因为在该号码之前有一个空格,请参阅' 600',这就是错误的原因..

希望这会有所帮助..

答案 3 :(得分:0)

使用此代码

final int f = -1; // or other invalid value
if (edittext.getText().toString().length() > 0)
f = Integer.parseInt(edittext.getText().toString());

答案 4 :(得分:0)

在edittext xml layout上使用此行,

android:inputType="number"