当编辑文本中没有值时,Android应用程序崩溃
我正在制作一个单位转换器,但如果我没有在编辑文本中输入任何值并按下计算按钮,应用程序将崩溃,错误为无效浮点:。另外,我想禁止在数字之前输入零,例如0300。我如何做到这一点当编辑文本中没有值时,Android应用程序崩溃,android,crash,android-edittext,textwatcher,Android,Crash,Android Edittext,Textwatcher,我正在制作一个单位转换器,但如果我没有在编辑文本中输入任何值并按下计算按钮,应用程序将崩溃,错误为无效浮点:。另外,我想禁止在数字之前输入零,例如0300。我如何做到这一点 //handle calculate calcButton=(Button)findViewById(R.id.calcButton); calcButton.setOnClickListener(new View.OnClickListener() { @Override
//handle calculate
calcButton=(Button)findViewById(R.id.calcButton);
calcButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Spinner spinner = (Spinner) findViewById(R.id.unit_spinner);
String spinnerText = spinner.getSelectedItem().toString();
EditText unit_edit = (EditText) findViewById(R.id.unit_edit);
amount = Float.valueOf(unit_edit.getText().toString());
if (unit_edit.getText().toString().equals(null)) {
Toast.makeText(getApplicationContext(), "Insert Value To Convert",
Toast.LENGTH_LONG).show();
} else {
switch (spinnerText) {
case "Kilograms":
kilograms = amount;
grams = amount * 1000;
ListView();
break;
case "Grams":
grams = amount;
kilograms = amount / 1000;
ListView();
break;
}
}
}
});
}
您可能会引发NumberFormatException,因为EditText字段文本是且不是有效的浮点值,所以会在以下行引发异常:
amount = Float.valueOf(unit_edit.getText().toString());
您需要做的是在尝试获取字符串的浮点值之前添加一些验证和检查
查看方法文档了解更多详细信息您无法将空值解析为浮点值。您应该首先测试它是否为空,然后执行您想要的操作,如下所示:
String text = unit_edit.getText().toString();
if(!text.isEmpty()){ // Test if the text is empty
if(text.matches("[0-9]+")){ // Test if it only contains numbers, using REGEX
amount = Float.valueOf(text); // Only then parse to float.
// Switch and rest of the stuff
} else {
Toast.makeText(getApplicationContext(), "Use only numbers from 0 to 9.",
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "The field is empty",
Toast.LENGTH_LONG).show();
}
这些评论解释了发生的事情。关于某些数字中的前导0,使用valueOf将删除它,0300将被解析为300,因此无需担心。如果您仍然需要与之相关的内容,请告诉我,我将编辑我的答案。这可能有助于您的EditText将输入限制为仅数字
<EditText
android:id="@+id/unit_edit"
android:inputType="number"
/>
您还可以限制数字、数字类型(如十进制)
<EditText
android:id="@+id/unit_edit"
android:digits="0123456789."
android:inputType="numberDecimal"
/>
如果您也可以发布异常,这将非常理想。也许您应该使用unit_edit.getText==null而不是unit_edit.getText.toString.equalsnull