2017-08-25 35 views
0

我目前正在进行验证,其中包含inputtype编号的edittext,用于显示用户购物车中购买的物品的数量。我想确保编辑edittext的值时,如果值为“”,“0”或“00”等,只要它是< 1,那么值将被设置为“1”。带输入类型编号的Android EditText使文本更改的值始终> 0

我已经厌倦了下面的代码:

 txtJumlah.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

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

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       int jumlah = Integer.parseInt(txtJumlah.getText().toString()); 
       if(txtJumlah.getText().toString().equals("") || jumlah <= 1) { 
        txtJumlah.setText("1"); 
       } 
       calculate(); 
      } 
     }); 

但它返回一个java.lang.StackOverflowError的:堆栈大小8MB

谁能帮助我?谢谢

回答

1

替换此:

if(txtJumlah.getText().toString().equals("") || jumlah <= 1) { 
    txtJumlah.setText("1"); 
} 

由:

if(txtJumlah.getText().toString().equals("") || jumlah < 1) { 
    txtJumlah.setText("1"); 
} 

上述解决方案必须解决的问题。

一个建议来优化代码:

int jumlah = Integer.parseInt(txtJumlah.getText().toString()); 

这可能会导致ParseException(如果txtJumlah.getText().toString()是字符串,而不是数字)

+0

txtJumlah.getText()将永远不会返回null。它将始终返回一个空字符串。唯一可能导致NullPointerException的是如果TextView为空。即使你尝试setText(null),它也会将它转换为空字符串。 – Lunkie

+0

同意,更新了答案 –

2

当您将文本设置为“1”时,它将一次又一次地调用afterTextChanged导致无限循环。请尝试将jumlah < 1代入您的if语句中。