当一个为空时,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());
}
...
我有 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());
}
...