1

我有一个包含两个 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;
}
4

2 回答 2

1

TextChanged如果用户没有输入任何内容,则不会触发,因为文本没有更改...您应该默认禁用该按钮。

您是否尝试过调试,因为这应该向您显示事件没有触发。

于 2012-06-01T16:02:25.277 回答
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

于 2012-06-01T15:56:09.427 回答