我正在创建一个单位转换器,但是如果我没有在编辑文本中输入任何值并按下计算按钮,则应用程序崩溃并显示错误Invalid float: ""
。另外,我想禁止在数字之前输入零(例如0300)。我该如何做到这一点?
//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;
}
}
}
});
}
答案 0 :(得分:0)
由于NumberFormatException
字段文本为EditText
且""
不是有效""
值,因此您可能会收到float
,因此抛出异常在以下行:
amount = Float.valueOf(unit_edit.getText().toString());
在尝试获取float
的{{1}}值之前,您需要做的是添加一些验证和检查。
查看方法文档以获取更多详细信息http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf(java.lang.String)
答案 1 :(得分:0)
您无法解析空值以进行浮动。您应首先测试它是否为空,然后执行您想要的操作,如下所示:
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
,因此无需担心。如果您仍想要与之相关的内容,请告诉我并告知我们编辑我的答案。
答案 2 :(得分:0)
这可能对EditText
仅限输入数字有用。
<EditText
android:id="@+id/unit_edit"
android:inputType="number"
/>
您还可以限制数字,数字类型,如十进制
<EditText
android:id="@+id/unit_edit"
android:digits="0123456789."
android:inputType="numberDecimal"
/>