Vivek_Neel
Vivek_Neel

Reputation: 1353

Validating email does not work with textInputLayout

I have the textInputLayout for which i added the listener. I'm trying to check if the enter email is valid or not. To do this i have written the below code. but it does not work. Even if i give the right email id it shows valid email id.

package com.hari.ga.activities;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.hari.ga.lending.R;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Shiva on 17-10-2015.
 */
public class Personal extends AppCompatActivity {

    protected Button next;
    EditText editText;
    String e;
    Boolean check;
    protected TextInputLayout emailText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.personal_details);
        editText = (EditText)findViewById(R.id.email);
        next = (Button)findViewById(R.id.next_button);
       emailText = (TextInputLayout)findViewById(R.id.emailText);
       e = editText.getText().toString();


        emailText.getEditText().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) {
                boolean c = checkEmail(e);
                if (!c) {
                    emailText.setError("valid email id is required");
                    emailText.setErrorEnabled(true);
                } else {
                  emailText.setErrorEnabled(false);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
      /*  editText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!TextUtils.isEmpty(e)) {
                    Snackbar.make(v, e, Snackbar.LENGTH_SHORT).show();
                    emailText.setErrorEnabled(false);
                } else {
                    emailText.setError("Input required");
                    emailText.setErrorEnabled(true);
                }
            }
        }); */
        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(check==false) {
                    Toast.makeText(getApplicationContext(), "Please make sure the details are right", Toast.LENGTH_LONG).show();

                } else{
                    Intent intent = new Intent(Personal.this, HomeDetails.class);
                    startActivity(intent);
                }


            }
        });
    }
    public static boolean checkEmail(String email) {

        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}" + ")+");
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
    }
}

Upvotes: 4

Views: 2648

Answers (5)

Arpit Patel
Arpit Patel

Reputation: 8057

Try this one

private boolean validateEmail() {
        String email = inputEmail.getText().toString().trim();

        if (email.isEmpty() || !isValidEmail(email)) {
            inputLayoutEmail.setError(getString(R.string.err_msg_email));
            requestFocus(inputEmail);
            return false;
        } else {
            inputLayoutEmail.setErrorEnabled(false);
        }

        return true;
    }

Upvotes: 0

Madhur
Madhur

Reputation: 3353

This should work,

android.util.Patterns.EMAIL_ADDRESS.matcher(emailText.getText().toString()).matches())

Upvotes: 4

Vivek_Neel
Vivek_Neel

Reputation: 1353

Solved:

  @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                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}" + ")+");
                if(!EMAIL_ADDRESS_PATTERN.matcher(s).matches())
                {
                    emailText.setError("valid email id is required");
                    emailText.setErrorEnabled(true);
                } else {
                  emailText.setErrorEnabled(false);
                }
            }

Upvotes: 0

desmondtzq
desmondtzq

Reputation: 456

The code is not working because you are checking on the String e instance in your TextChangedListener, which you assigned in your onCreate method, which means that you are not checking on the updated text from the EditText. No matter what the changes are to your EditText, it is always checking on that String instance and thus always returning true.

What you need to do is to get the updated text from the EditText and use it to run your check function. You can do it like this

@Override
public void afterTextChanged(Editable s) {
    String updatedText = s.toString();
    // do your check on updatedText here
}

Upvotes: 2

Rishad Appat
Rishad Appat

Reputation: 1808

Try this function...

 public boolean isValidEmailAddress(String email) {
    String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
    java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern);
    java.util.regex.Matcher m = p.matcher(email);
    return m.matches();
}

Upvotes: 1

Related Questions