0

2 つの EditText を計算する TextView があります。数字が EditText にある限り機能しますが、すべての数字が削除されるとすぐにこのエラーが発生します

java.lang.NumberFormatException: '' を整数として解析できません

エラーが発生する理由は理解できますが、修正方法がわかりません。このサイトで答えをグーグルで検索しましたが、私の状況ではうまくいかないようです。NumberFormatException をキャッチしようとしましたが、できません。何か助けはありますか?

items = (EditText)findViewById(R.id.items);
itemcost = (EditText)findViewById(R.id.itemcost);
inventoryvalue = (TextView)findViewById(R.id.inventoryvalue);


TextWatcher textWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
calculateResult();
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
};

items.addTextChangedListener(textWatcher);
itemcost.addTextChangedListener(textWatcher);
}

private void calculateResult() throws NumberFormatException {

String s1 = items.getText().toString();
    String s2 = itemcost.getText().toString();
    int value1 = Integer.parseInt(s1);
    int value2 = Integer.parseInt(s2);
    int result = value1 * value2; {

// Calculates the result
result = value1 * value2;
// Displays the calculated result
inventoryvalue.setText(String.valueOf(result));             
}
4

4 に答える 4

5

文字列に数値のみが含まれているかどうかを確認します。

s1 = s1.trim();
if (s1.matches("[0-9]+") {
 value1 = Integer.parseInt(s1);
}
于 2013-06-14T12:52:13.410 に答える
0

calculateResult メソッドで、すべてを if ブロックに入れます。

if(items.getText().tostreing().length>0 && itemcost.getText().toString().length>0){
//your current method definition
}
于 2013-06-14T12:53:03.753 に答える
0

afterTextChangedメソッドを次のように変更します。

public void afterTextChanged(Editable s) {
  if (s.length > 0)
      calculateResult();
}
于 2013-06-14T12:55:08.897 に答える
0

calculateResult() では、Integer.parseInt(s1); を実行します。文字列 s1 または s2 が空かどうかを確認せずに?

したがって、空の String を Int に変換することはできません。それらを整数に変換して計算する前に、s1またはs2が空であるかどうかを確認してください...

: .equals(String s) を使用して、文字列が他の文字列と等しいかどうかを確認できます。

于 2013-06-14T12:55:42.777 に答える