【问题标题】:How to handle not filled EditText in Android如何在Android中处理未填充的EditText
【发布时间】:2015-08-19 19:28:31
【问题描述】:

我想编写一个带有 3 个输入(NUM1、NUM2、NUM3)、3 个按钮(SUM、SUB、MUL)和 1 个 RESULT 文本平面的简单计算器。在我的应用程序中,如果我提供所有输入,则该应用程序可以正常工作。但是,如果我没有为 1 个字段提供任何输入,我会遇到应用停止错误。我想让我的应用可以使用任意数量的输入。

这是我的代码。

public void onButtonClickSum(View v){
    EditText e1 = (EditText)findViewById(R.id.editText);
    EditText e2 = (EditText)findViewById(R.id.editText2);
    EditText e3 = (EditText)findViewById(R.id.editText3);

    TextView t1 = (TextView)findViewById(R.id.textView2);

    int num1 = Integer.parseInt(e1.getText().toString());
    int num2 = Integer.parseInt(e2.getText().toString());
    int num3 = Integer.parseInt(e3.getText().toString());

    int sum = num1 + num2 + num3;

    t1.setText(Integer.toString(sum));

}

public void onButtonClickSub(View v){
    EditText e1 = (EditText)findViewById(R.id.editText);
    EditText e2 = (EditText)findViewById(R.id.editText2);
    EditText e3 = (EditText)findViewById(R.id.editText3);

    TextView t1 = (TextView)findViewById(R.id.textView2);

    int num1 = Integer.parseInt(e1.getText().toString());
    int num2 = Integer.parseInt(e2.getText().toString());
    int num3 = Integer.parseInt(e3.getText().toString());

    int sub = num1 - num2 - num3;

    t1.setText(Integer.toString(sub));
}

public void onButtonClickMul(View v){
    EditText e1 = (EditText)findViewById(R.id.editText);
    EditText e2 = (EditText)findViewById(R.id.editText2);
    EditText e3 = (EditText)findViewById(R.id.editText3);

    TextView t1 = (TextView)findViewById(R.id.textView2);

    int num1 = Integer.parseInt(e1.getText().toString()); 
    int num2 = Integer.parseInt(e2.getText().toString());
    int num3 = Integer.parseInt(e3.getText().toString());

    int mul = num1 * num2 * num3;

    t1.setText(Integer.toString(mul));
}

【问题讨论】:

  • 如果没有文本,则解析失败,因此您需要使用一些默认值,即 0 表示加法,1 表示乘法

标签: android variables input error-handling null


【解决方案1】:
  • 在将输入解析为整数之前,您需要进行 null 或空检查
  • 尝试制作 EditText 对象字段,因为您在每个方法中都重复使用它们

例子:

// Fields
private EditText mEditText1 = (EditText)findViewById(R.id.editText);
private EditText mEditText2 = (EditText)findViewById(R.id.editText2);
private EditText mEditText3 = (EditText)findViewById(R.id.editText3);
private TextView mTextView = (TextView)findViewById(R.id.textView2);

public void onButtonClick(View v){
  int num1 = 0;
  int num2 = 0;
  int num3 = 0;

  String e1 = mEditText1.getText();
  String e2 = mEditText2.getText();
  String e3 = mEditText3.getText();

  if(!e1.isEmpty()) {
    num1 = Integer.parseInt(e1);
  }
  if(!e2.isEmpty()){
    num2 = Integer.parseInt(e2);
  }
  if(!e3.isEmpty()){
    num3 = Integer.parseInt(e3);
  }

  int sub = num1 - num2 - num3;

  mTextView.setText(Integer.toString(sub));
}

【讨论】:

    【解决方案2】:

    改变

    int num1 = Integer.parseInt(e1.getText().toString());
    int num2 = Integer.parseInt(e2.getText().toString());
    int num3 = Integer.parseInt(e3.getText().toString());
    

    int num1 = 0, num2 = 0, num3 = 0;
    int num1_error = 0, num2_error = 0, num3_error = 0;
    try{
      num1 = Integer.parseInt(e1.getText().toString());
    }Catch(Exception e){
      num1_error = 1;
    }
    
    try{
      num2 = Integer.parseInt(e2.getText().toString());
    }Catch(Exception e){
      num2_error = 1;
    }
    
    try{
      num3 = Integer.parseInt(e3.getText().toString());
    }Catch(Exception e){
      num3_error = 1;
    }
    
    // for addition
        int sum = 0;
        if(num1_error == 0){
          sum += num1;
        }
    
        if(num2_error == 0){
          sum += num2;
        }
    
        if(num1_error == 0){
          sum += num3;
        }
    
        t1.setText(Integer.toString(sum));
    
    // for subtraction
        int sub = 0;
        if(num1_error == 0){
          sub = num1 - sub;
        }
    
        if(num2_error == 0){
          sub = sub - num2;
        }
    
        if(num3_error == 0){
          sub = sub - num3;
        }
    
        t1.setText(Integer.toString(sub));
    
    // for multiplication
        int mul = 1;
        if(num1_error == 0){
          mul = mul*num1;
        }
    
        if(num2_error == 0){
          mul = mul*num2;
        }
    
        if(num3_error == 0){
          mul = mul*num3;
        }
    
        t1.setText(Integer.toString(mul));
    

    【讨论】:

      【解决方案3】:

      尝试对其他方法执行此操作:

      EditText e1 ,e2, e3;
      TextView t1;
      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              e1 = (EditText)findViewById(R.id.editText);
              e2 = (EditText)findViewById(R.id.editText2);
              e3 = (EditText)findViewById(R.id.editText3);
      
              t1 = (TextView)findViewById(R.id.textView2);
           }
          public void onButtonClickSum(View v){
          if(e1.getText().toString().length()==0){
          e1.setError("Required");
          }
          else if(e2.getText().toString().length()==0){
          e2.setError("Required");
          }
          else if(e3.getText().toString().length()==0){
          e3.setError("Required");
          }
          else{
              int num1 = Integer.parseInt(e1.getText().toString());
              int num2 = Integer.parseInt(e2.getText().toString());
              int num3 = Integer.parseInt(e3.getText().toString());
      
              int sum = num1 + num2 + num3;
      
              t1.setText(Integer.toString(sum));
          }
          }
      

      【讨论】:

      • 你也不需要在每个方法中使用它们的 id 一次又一次地定义视图,只需在 onCreate 中使用 findViewById 定义视图并在任何你想要的地方使用。
      • Aakash 我不明白你所说的“定义视图 onCreate”是什么意思
      猜你喜欢
      • 2011-12-14
      • 2020-12-06
      • 2010-12-02
      • 2012-02-22
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2012-03-17
      相关资源
      最近更新 更多