即使电子邮件有效,电子邮件检查也会给出错误消息
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");
【讨论】:
以上是关于即使电子邮件有效,电子邮件检查也会给出错误消息的主要内容,如果未能解决你的问题,请参考以下文章