如何处理 Android 中未填充的 EditText
How to handle not filled EditText in Android
我想用 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));
}
变化自
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));
尝试这样做,其他方法也一样:
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));
}
}
- 在将输入解析为整数之前,您需要进行 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));
}
我想用 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));
}
变化自
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));
尝试这样做,其他方法也一样:
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));
}
}
- 在将输入解析为整数之前,您需要进行 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));
}