0

我在 EditText 中给出了一些值,但是如果我尝试使用背包按钮删除它并输入新值..它正在强制关闭。如何纠正这个问题

我的代码如下

empty_cyl_recvd = (EditText) findViewById(R.id.empty_cyl_recvd);
 new_cyl_recvd = (EditText) findViewById(R.id.new_cyl_recvd);
 filled_cyl_unload = (EditText) findViewById(R.id.filled_cyl_unload);`enter code here`
  dmg_cyl_recvd = (EditText) findViewById(R.id.dmg_cyl_recvd);      

     total_dmg_cyl=(EditText)findViewById(R.id.sdff);
    total_empty_cyl=(EditText)findViewById(R.id.wertyu);    
    total_filled_cyl=(EditText)findViewById(R.id.gfhgftg);

 empty_cyl_recvd.addTextChangedListener(new TextWatcher()
         {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {

    int a=Integer.parseInt(empty_cyl_recvd.getText().toString());             int b=Integer.parseInt(Util.EMPTY_LIST.get(0).toString());
                int c=a+b;
                total_empty_cyl.setText(""+c);


                            }});

         filled_cyl_unload.addTextChangedListener(new TextWatcher()
         {

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

                int a=Integer.parseInt(filled_cyl_unload.getText().toString());
                int b=Integer.parseInt(Util.FILL_LIST.get(0).toString());
                int c=a+b;
                total_filled_cyl.setText(""+c);


         });


         dmg_cyl_recvd.addTextChangedListener(new TextWatcher(){

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

                int a=Integer.parseInt(dmg_cyl_recvd.getText().toString());
                int b=Integer.parseInt(Util.DAMAGE_LIST.get(0).toString());
                int c=a+b;
                                total_dmg_cyl.setText(""+c);


         });``
4

2 回答 2

0

添加适当的异常处理以避免强制关闭。当 Integer.parseInt(..) 获得空/无效文本时,您可能会收到 NumberFormatException 。

于 2013-10-14T06:21:54.743 回答
0

首先,我建议您使用调试器,这将帮助您快速发现此类问题。

在 onTextChange 的代码中存在异常的可能性(NPE/NumberFormat/ArrayIndexOutOfBounds)。所以要对这段代码进行适当的检查

int a,b;
if(dmg_cyl_recvd.getText() != null && !dmg_cyl_recvd.getText().trim().equals("")) // also put it in try-catch for the case the input is not numeric
try{
    a=Integer.parseInt(dmg_cyl_recvd.getText().toString());
}catch(NumberFormatException ex){
//alert user about wrong input
}
if(Util.DAMAGE_LIST.size() > 0)//assuming it is a list, if not use method that gives the size of corresponding collection
    b=Integer.parseInt(Util.DAMAGE_LIST.get(0).toString());
于 2013-10-14T05:41:49.537 回答