当一个为空时,EditText 导致应用程序崩溃

EditText causing app crash when one is null

我有 6 个 EditText 字段和几个复选框,当全部 6 个都使用时一切正常。问题是其中一个是空的。我可以放 if(TextUtils.isEmpty(xxx)) { - show msg 但这不是这个应用程序的好解决方案。

想法是先输入 3 个 Edittexts,点击按钮并获取一些值。另外,在其他 3 个 EditText 中输入,然后再次按下按钮进行新的计算。

如何获取值 VL1、VL2 ...(如图所示)?

这是代码:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et1=(EditText)findViewById(R.id.ET1);
    et2=(EditText)findViewById(R.id.ET2);
    et3=(EditText)findViewById(R.id.ET3);

    et4=(EditText)findViewById(R.id.ET4);
    et5=(EditText)findViewById(R.id.ET5);
    et6=(EditText)findViewById(R.id.ET6);

 public void Calcular(View view){
    String resultado = "";
    double VS1 = Double.parseDouble(et1.getText().toString());
    double VS2 = Double.parseDouble(et2.getText().toString());
    double VS3 = Double.parseDouble(et3.getText().toString());

  double VS4 = Double.parseDouble(et4.getText().toString());
  double VS5 = Double.parseDouble(et5.getText().toString());
  double VS6 = Double.parseDouble(et6.getText().toString());

    if (CheckB2.isChecked()){
        if (VS1 == 17) {
            double qq17 = 0.17;
            double nq17 = 14.08;
           result = " Price "+ "new" + "\n" + nq17 qq17 ;
        }
        else{

            if (VS1 == 18) {
            double qq18 = 0.18;
            double nq18 = 19.28;
           result = " Price "+ "new" + "\n" + nq18 qq18 ;
            }
...

当我在所有 6 个 EditText 框中输入值时,一切正常。这是简化的代码,代码中有单选按钮和更多数据,但对于这个问题并不重要。

当您获取任何 Edittext 的 null 值并将其转换为字符串(例如 et1.getText().toString())时,结果是一个空字符串,如下所示:"".

根据 Double.parseDouble() 文档,该函数可能会抛出 2 个异常:

  • NullPointerException–当解析的字符串为空时
  • NumberFormatException– 当解析的字符串不包含可解析的浮点数时

我怀疑 Double.parseDouble("") 由于解析值无效导致崩溃。

double VS1 = 0;
double VS2 = 0;
...
if (!et1.getText().toString().isEmpty()) {
  VS1 = Double.parseDouble(et1.getText().toString());
}
if (!et2.getText().toString().isEmpty()) {
  VS2 = Double.parseDouble(et2.getText().toString());
}
...