我的活动有两个EditText框,一个电子邮件和一个纯文本。我想检查电子邮箱是否为空,并且在允许用户继续前与电子邮件模式匹配。模式匹配器部分可以工作,但空字符串部分不起作用。
我验证用户输入数据,然后根据电子邮件是否正确将两个按钮设置为可点击或不可点击。但是,如果该框为空,则允许用户在不应该按下按钮时按下该按钮。当框中有文本时,只有当用户在匹配电子邮件模式时按下按钮才能正确操作。
我的文字更改方法:
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String enteredEmail = email.getText().toString();
if (validateEmail(enteredEmail) == true) {
image1.setImageResource(R.drawable.greentick);
play.setClickable(true);
play.setFocusable(true);
existingUser.setClickable(true);
existingUser.setFocusable(true);
}
else {
System.out.println("Invalid");
image1.setImageResource(R.drawable.redcross);
play.setClickable(false);
play.setFocusable(false);
existingUser.setClickable(false);
existingUser.setFocusable(false);
}
}
我的validateEmail()方法:
public boolean validateEmail(String email) {
boolean validated = false;
if (android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() && (! email.equals("")) ) {
validated = true;
}
else {
validated = false;
}
return validated;
}
答案 0 :(得分:1)
TextChanged
将不会触发,因为文本未更改...您应该默认禁用该按钮。
您是否尝试过调试,因为这应该显示事件未触发。
答案 1 :(得分:0)
这是我验证电子邮件字段(正则表达式)的方式:
private Boolean validateEmail(String email)
{
return email.matches("^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@[a-zA-Z](-?[a-zA-Z0-9])*(\\.[a-zA-Z](-?[a-zA-Z0-9])*)+$");
}
仅供参考:我不记得,你可能需要org.apache.commons.lang3.stringutils