【发布时间】:2019-08-09 17:23:05
【问题描述】:
我正在 Android Studio 上用 Java 编写一个计算器,如果用户用点“。”调用结果,应用程序就会崩溃。单独或让 EditText 字段为空白。 我正在寻找一种解决方案,以防止这两种情况在三个领域的每一个中一起或单独发生。 我已经尝试过 TextWatcher 和 if/else 但没有成功。
设计editText字段的.xml文件已经设置为decimalNumber。
我已经试过了:
if(myfieldhere.getText().toString().equals(".")){myfieldhere.setText("0");}
如果一切正常,对于每个“勇气线”和“最终结果”线。两者都在 setOnClickListener 块内。这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.peso_layout);
result = findViewById(R.id.layresult);
conc = findViewById(R.id.layconc);
dose = findViewById(R.id.laydose);
peso = findViewById(R.id.laypeso);
calc = findViewById(R.id.laycalcpeso);
calc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
float valor1 = Float.parseFloat(peso.getText().toString());
float valor2 = Float.parseFloat(conc.getText().toString());
float valor3 = Float.parseFloat(dose.getText().toString());
float finalresult = valor1 * valor2 * valor3;
result.setText("The result is: " + finalresult);
}
});
}
理想的输出应该是应用程序在这两种情况发生时不会崩溃,并向用户发送输入无效的错误消息。 我收到的是应用程序崩溃。 非常感谢你。我是 Java 的初学者,我为此苦苦挣扎了几天。
【问题讨论】:
-
从
Float.parseFloat抛出异常。您可以捕获它并显示带有错误消息的Toast,而不是计算结果。不过,这可能不是您想要的。 -
为什么不直接获取浮动之前的文本并对其进行验证?例如,如果 !empty,如果 != "."。或相反并返回或其他。只是简单的验证......你似乎没有什么理由让它过于复杂。您也可以使用 try catch 并返回。
-
M. Prokhorov,我可以设置 Toast,但应用程序一直崩溃,因为它没有时间显示按摩。 CmosBattery,我尝试过相反的方法,但是 if 语句出现错误。谢谢你们的解决方案。
标签: java android validation android-studio escaping