Validación de correo electrónico en EditText – Android

Tengo un Email EditText y quiero comprobarlo usando la validación de correo electrónico.

Este es mi código de validación de correo electrónico

public final static boolean isValidEmail(CharSequence target) { if (target == null) { return false; } else { return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches(); } } public void showAlertValidation() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(RegisterActivity.this); alertDialog.setTitle("Failed"); alertDialog.setMessage("Invalid Email"); alertDialog.setNegativeButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } 

Y este es mi código de validación de EditText

 editTextEmail= (EditText) findViewById(R.id.editTextEmail); email = editTextEmail.getText().toString(); if(email.length() == 0) { editTextEmail.setError("Email required!"); if (isValidEmail(email)) { Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show(); } else{ showAlertValidation(); } } 

El problema es el resultado del EditText. Cuando el valor de EditText es null, ejecuta showAlertValidation(); Pero si el valor de EditText es "email" o "email @ example" o "email@example.com", no ejecuta showAlertValidation(); ¿Algo malo con mi código?

Creo que aquí es donde usted cometió un error (código de validación de EditText):

 editTextEmail= (EditText) findViewById(R.id.editTextEmail); email = editTextEmail.getText().toString(); if(email.length() == 0) { editTextEmail.setError("Email required!"); } else if (isValidEmail(email)) { Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show(); } else{ showAlertValidation(); } 

TRABAJANDO !!!!

Tenemos un matador de correo electrónico simple ahora

  private static boolean isValidEmail(String email) { return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); } 

Está comparando erróneamente la longitud del texto de EditText con 0, y sólo si es verdad, hace su lógica de validación.

Aquí está el código correcto:

  @Override public void onClick(View v) { String email = editTextEmail.getText().toString(); if(email.length() != 0) { if (isValidEmail(email)) { Toast.makeText(getApplicationContext(), "Valid email address!", Toast.LENGTH_SHORT).show(); } else{ editTextEmail.setError("Email required!"); showAlertValidation(); } } else{ editTextEmail.setError("Email required!"); } } 

debe "" limpiar el espacio antes de comprobar la longitud de la cadena de correo electrónico con String.trim ();

 if(email.trim().length() == 0) {//code here} 

Es mejor hacer una clase que valide el correo electrónico. Para que pueda reutilizarlo en cualquier lugar que necesite. Ni siquiera necesita poner el texto de edittext en una cadena separada. Haga la clase siguiente:

 public class EmailValidator { private Pattern pattern; private Matcher matcher; private static EmailValidator sInstance; public static EmailValidator getInstance() { if (sInstance == null) { sInstance = new EmailValidator(); } return sInstance; } private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; public EmailValidator() { pattern = Pattern.compile(EMAIL_PATTERN); } public boolean validate(final String hex) { matcher = pattern.matcher(hex); return matcher.matches(); }} 

Ahora utilice esta clase para verificar la validación del correo electrónico de edittext así:

 if(!EmailValidator.getInstance().validate(editTextEmail.getText().toString().trim())){ editTextEmail.setError("Invalid email address"); } 

Espero que esto ayude.

El problema es su condición si

 if(email.length() == 0) { editTextEmail.setError("Email required!"); if (isValidEmail(email)) { Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show(); } else { showAlertValidation(); } } 

Como sólo valida su dirección de correo electrónico cuando su editText está vacío. Lo que puede hacer es:

 email.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(s.length() > 0) { if (isValidEmail(email)) { editTextEmail.setError(null); Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(),"valid email address Required",Toast.LENGTH_SHORT).show(); } } } }); 
  • ¿Cómo puedo verificar que la imagen URI es válida en Android?
  • EditText campo es necesario antes de pasar a otra actividad
  • Añadir una anotación personalizada a Android Saripaar
  • Cómo restringir el EditText para aceptar sólo caracteres alfanuméricos
  • Cómo convertir InputStream en origen?
  • Cómo cambiar la contraseña usando la contraseña antigua en el análisis de android
  • Cómo restringir el tiempo de entrada para edittext en android
  • Centrarse en segundo edittext sólo si primero es no-vacío android
  • Validar "desde fecha" y "hasta la fecha" en android
  • Mostrar error si el usuario introduce sólo espacios en EditText - Android
  • Mostrar mensaje de validación
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.