java - 当edittext为空并点击按钮时Android崩溃
问题描述
出于某种我不知道的原因,当我按下 EditText 为空的按钮时,应用程序崩溃,但如果我输入一些数字,它会完美运行。我不想添加“此字段已启用”之类的标志,我只想解决此问题。
package com.example.converfuel;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Ticket extends AppCompatActivity {
private EditText ED1, ED2;
private TextView TW;
private Button calcular;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ticket);
ED1 = (EditText) findViewById(R.id.Num1);
ED2 = (EditText) findViewById(R.id.Num2);
TW = (TextView) findViewById(R.id.DIVISION);
calcular = (Button) findViewById(R.id.calcular);
calcular.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
float Num1 = Float.parseFloat(ED1.getText().toString());
float Num2 = Float.parseFloat(ED2.getText().toString());
float DIV = Num1/Num2;
TW.setText(DIV+"");
double val = DIV;
val = val*100;
val = Math.round(val);
val = val / 100;
mostrar(val);
}
private void mostrar(double DIV){
TW.setText(DIV + "" +" €");
}
});
}
}
解决方案
你可能会得到NumberFormatException
在解析值之前检查
public static boolean isParsableToFloat(String value) {
try {
Float.parseFloat(value);
return true;
} catch(NumberFormatException e){
return false;
}
}
然后
String valueOfED1 = ED1.getText().toString();
String valueOfED2 = ED2.getText().toString();
if (isParsableToFloat(valueOfED1) && isParsableToFloat(valueOfED2)) {
float Num1 = Float.parseFloat(valueOfED2);
float Num2 = Float.parseFloat(valueOfED2);
//...
} else {
//...
}
推荐阅读
- sql - 需要从 XML 列获取 XML 数据到其他列
- powershell - 从文件夹复制文件,然后删除一些文件异常
- reactjs - 具有许多菜单项的 Material-UI Select 组件速度很慢 - 替代解决方案
- android - androidx.fragment.app.Fragment 无法转换为 android.app.Fragment
- java - 如何打印没有尾随逗号的地图?
- r - 将符号添加到 r 中的数据列
- mysql - 执行 LOCK TABLES 时拒绝远程用户访问
- ffmpeg - MP4 文件的“location”和“location-eng”元数据有什么区别?
- android - android KTX 是完全被弃用还是只有部分或扩展被弃用?
- apache - 如何将 domain.com/en/example1 更改为 domain.com/english/example1