我正在尝试验证我的Android编辑文本框,以便当按下按钮时如果编辑文本框为空将显示一条消息,我也验证编辑文本框以确保输入的值是一个数字,如果文本框为空,则会显示错误消息,说明该值必须是数字,我认为它与我的if语句的结构有关,但我不确定是什么。下面的代码是我已经尝试过的。
TextView Display;
EditText Input;
Display = (TextView) findViewById(R.id.tvOutput);
Input = (EditText) findViewById(R.id.eName);
try{
String UserInput = Input.getText().toString();
int number = Integer.parseInt(UserInput);
if(!UserInput.isEmpty()){
if(number == (int) number){
Display.setText(UserInput);
}
}else{
Display.setText("Please enter a value into the text box");
}
}catch(Exception e){
Display.setText("Please enter a number");
}
答案 0 :(得分:1)
你的问题是因为Integer.parseInt()
会为空字符串抛出NumberFormatException
,在if语句运行之前将控制流发送到catch块。
在解析之前将空检查重新排序为要修复的整数。
String UserInput = Input.getText().toString();
if(!UserInput.isEmpty()){
try{
int number = Integer.parseInt(UserInput);
Display.setText(UserInput);
}catch(NumberFormatException e){
Display.setText("Please enter a number");
}
}else{
Display.setText("Please enter a value into the text box");
}
要使用正确的方法来过滤数值,只需考虑将android:inputType=number
属性添加到布局XML中的EditText元素中,或者通过:
EditText.setInputType(InputType.TYPE_CLASS_NUMBER);
直接在java。
答案 1 :(得分:0)
您需要验证输入是否用户输入了数字而不是字母数字值,您可以执行以下操作:
String userInput = null;
do {
Display.setText("Please enter a number");
userInput = Input.getText().toString();
} while (!userInput.isEmpty() && !userInput.matches("[0-9]+"));
Display.setText(userInput);
以上do while循环是为了确保用户输入了数据及其有效输入。如果情况并非如此,那就继续获取用户输入。
最后一次,它是一个有效数字,只显示输入数字。
答案 2 :(得分:0)
如果文本框为空,则会显示错误消息,指出该值必须是数字
问题在于此片段:
try{
String UserInput = Input.getText().toString();
int number = Integer.parseInt(UserInput);
if(!UserInput.isEmpty()){
在您检查是否有可用值之前,您尝试将输入转换为整数。这意味着您可能尝试转换空字符串:""
。这不起作用,如果发生这种情况,Integer#parseInt
会抛出NumberFormatException
。这将引导您进入catch
区块,它将打印"请输入一个号码" 。
要解决此问题,只需先检查UserInput
是否为空,然后尝试将输入转换为整数:
String userInput = input.getText().toString();
if (!userInput.isEmpty()) {
try{
Integer.parseInt(userInput); // no need to store that result in a variable
display.setText(userInput);
} catch (Exception e) {
display.setText("Please enter a number");
}
} else {
display.setText("Please enter a value into the text box");
}
另外,请阅读Java Naming Conventions,因为每个变量都应以小写字母开头。我已经在代码示例中更改了您的变量名称。
答案 3 :(得分:0)
这2个辅助方法可以帮助您:
检查edittext是否包含文本。如果edittext没有设置文本错误消息
public static boolean hasText(Context context, EditText editText)
{
boolean validated = true;
String text = editText.getText().toString().trim();
if (text.length() == 0)
{
editText.setText(text);
validated = false;
Drawable d = context.getResources().getDrawable(R.drawable.alert_small);
d.setBounds(0, 0,
d.getIntrinsicWidth(), d.getIntrinsicHeight());
editText.setError(context.getString(R.string.required_field), d);
}
else
{
editText.setError(null);
}
return validated;
}
检查文字是否为数字
public static boolean isNumber(String str)
{
try
{
int d = Integer.parseInt(str);
}
catch (NumberFormatException nfe)
{
return false;
}
return true;
}