即使电子邮件有效,电子邮件检查也会给出错误消息

Posted

技术标签:

【中文标题】即使电子邮件有效,电子邮件检查也会给出错误消息【英文标题】:Email check gives error message even though email is valid 【发布时间】:2014-05-15 00:53:32 【问题描述】:

我正在尝试验证编辑文本中的电子邮件。以下是我用于检查电子邮件模式的代码。即使输入的电子邮件格式有效,我的应用程序仍会返回错误消息。我似乎找不到问题。

public final Pattern EMAIL_ADDRESS_PATTERN = Pattern
        .compile("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]1,256" + "\\@"
                + "[a-zA-Z0-9][a-zA-Z0-9\\-]0,64" + "(" + "\\."
                + "[a-zA-Z0-9][a-zA-Z0-9\\-]0,25" + ")+");

private boolean checkEmail(String email) 
    return EMAIL_ADDRESS_PATTERN.matcher(email).matches();


@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_item_form);

    // Edit Text
    itemName = (EditText) findViewById(R.id.i_itemname);
    itemPrice = (EditText) findViewById(R.id.i_price);
    itemDesc = (EditText) findViewById(R.id.i_des);
    inputEmail = (EditText) findViewById(R.id.i_email);
    contact = (EditText) findViewById(R.id.i_contact);
    password = (EditText) findViewById(R.id.i_password);
    itemCat = (Spinner) findViewById(R.id.spinner1);


    category = itemCat.getSelectedItem().toString();
    postemail = inputEmail.getText().toString();

    // Create button
    Button btnCreateProduct = (Button) findViewById(R.id.submitpostitem);

    // button click event
    btnCreateProduct.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View view) 
            category = itemCat.getSelectedItem().toString();
            if (itemName.length() < 2) 
                itemName.setError("Invalid item name");
                return;
             else if (itemPrice.length() == 0) 
                itemPrice.setError("Invalid item price");
                return;
             else if (!checkEmail(postemail)) 
                inputEmail.setError("Invalid email");
                return;
             else if (contact.length() < 10 || contact.length() > 12) 
                contact.setError("Invalid contact");
                return;
             else if (password.length() < 6) 
                password.setError("At least 6 characters long");
                return;
             else if (category.equals("---")) 
                Toast.makeText(PostItemForm.this,
                        "Please choose a category", Toast.LENGTH_LONG)
                        .show();
                return;
            

            // creating new product in background thread
            new CreateNewProduct().execute();
        
    );

【问题讨论】:

请记录错误日志.... 没有错误是错误日志。错误消息来自 setError 响应。 【参考方案1】:

尝试使用以下代码验证电子邮件地址:

android.util.Patterns.EMAIL_ADDRESS.matcher(YourString).matches();

所以checkEmail 必须是这样的:

private boolean checkEmail(String email) 
    if (TextUtils.isEmpty(email)) 
        return false;
     else 
        return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    

你可以看到以下链接:

Email Address Validation in Android on EditText

How should I validate an e-mail address on Android?

【讨论】:

【参考方案2】:

尝试如下:

     Pattern m_pattern = Pattern
    .compile("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]1,256" + "\\@"
            + "[a-zA-Z0-9][a-zA-Z0-9\\-]0,64" + "(" + "\\."
            + "[a-zA-Z0-9][a-zA-Z0-9\\-]0,25" + ")+");

private boolean checkEmail(String email) 
       Matcher m_matcher = m_pattern.matcher(email.toString().trim());
       if (!m_matcher.matches()) 
            return true;
        else
       return false;

获取Button 内的EditText 的值,而不是onCreate。正如您在点击侦听器外部编写的行 postemail = inputEmail.getText().toString(); 一样,它将始终获得先前的值。

只需在点击监听器中更改您的代码,如下所示。

  btnCreateProduct.setOnClickListener(new View.OnClickListener() 

    @Override
    public void onClick(View view) 
        category = itemCat.getSelectedItem().toString();
        postemail = inputEmail.getText().toString();

     if (itemName.length() < 2) 
            itemName.setError("Invalid item name");
            return;
         else if (itemPrice.length() == 0) 
            itemPrice.setError("Invalid item price");
            return;
         else if (!checkEmail(postemail)) 
            inputEmail.setError("Invalid email");
            return;
         else if (contact.length() < 10 || contact.length() > 12) 
            contact.setError("Invalid contact");
            return;
         else if (password.length() < 6) 
            password.setError("At least 6 characters long");
            return;
         else if (category.equals("---")) 
            Toast.makeText(PostItemForm.this,
                    "Please choose a category", Toast.LENGTH_LONG)
                    .show();
            return;
        

        // creating new product in background thread
        new CreateNewProduct().execute();
    
);

【讨论】:

同样的问题,从我的 seterror 消息中收到无效的电子邮件 我认为你需要改变你的正则表达式。您要验证哪个电子邮件地址? 尝试在按钮点击事件中获取EditText 的值,而不是在它之外。【参考方案3】:

试试这个....

将此代码粘贴到 Oncreate 方法之前

 public static boolean isValidEmail(String str) 
    boolean isValid = false;
    if (Build.VERSION.SDK_INT >= 8) 
        return android.util.Patterns.EMAIL_ADDRESS.matcher(str).matches();
    
    String expression = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]2,)$";
    CharSequence inputStr = str;
    Pattern pattern = Pattern.compile(expression);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) 
        isValid = true;
    
    return isValid;

并在编辑文本后检查此条件

     if (!isValidEmail( inputEmail.getText().toString().trim())) 
     inputEmail.setError("Invalid Email ID");

【讨论】:

以上是关于即使电子邮件有效,电子邮件检查也会给出错误消息的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件地址已经注册,即使注册新的电子邮件 joomla

如果电子邮件已存在或为空,请检查文本输入

如何检查电子邮件地址是有效的 Lync 用户?

Python 发送电子邮件不起作用,并给出很长的错误消息

在 Django 中编辑用户配置文件时检查重复的电子邮件

如何检查电子邮件是不是有效? [复制]