EditText contents validation

I was validating my EditText contents,

I used validating my EditText contents using

String enteredUserName = userName.getText().toString();
String enteredPassword = userPassword.getText().toString();

if( enteredUserName != " " && enteredPassword != " " ) {
    createNewAccount();
}

but above did't work for me, then i see a solution of this,

if( enteredUserName.length() != 0 && enteredPassword.length() != 0 ) {
    createNewAccount();
}

It worked perfectly for me

My question is, why my first code snippet not worked, while i have used above code for validation in java. Thanks

Edit2

setContentView( R.layout.create_account_activity_layout );
btn = ( Button ) findViewById( R.id.create_account_btn );
userName = ( EditText ) findViewById( R.id.name );
userPassword = ( EditText ) findViewById( R.id.password );

enteredUserName = userName.getText().toString().trim();
enteredPassword = userPassword.getText().toString().trim();

userName.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) {
               if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                   createNewAccount();
               }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

userPassword.addTextChangedListener(new TextWatcher() {     
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
         if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
               createNewAccount();
           }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub          
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub  
    }
});

Edit3

String enteredUserName; 
String enteredPassword;

@Override
protected void onCreate( Bundle savedInstanceState ) {
    // TODO Auto-generated method stub
    super.onCreate( savedInstanceState );

    setContentView( R.layout.create_account_activity_layout );
    btn = ( Button ) findViewById( R.id.create_account_btn );
    userName = ( EditText ) findViewById( R.id.name );
    userPassword = ( EditText ) findViewById( R.id.password );

    enteredUserName = userName.getText().toString().trim();
    enteredPassword = userPassword.getText().toString().trim();

    userName.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) {

                enteredUserName = userName.getText().toString();
                enteredPassword = userPassword.getText().toString();
                 if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                       createNewAccount();
                 }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

    userPassword.addTextChangedListener(new TextWatcher() {         
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
             enteredUserName = userName.getText().toString();
             enteredPassword = userPassword.getText().toString();
             if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                   createNewAccount();
               }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

    /*while( enteredUserName.toString().isEmpty() || enteredPassword.toString().isEmpty() ) {
        Toast.makeText(CreateAccountActivity.this, "Please enter proper user name and password", Toast.LENGTH_SHORT).show();
        userName = ( EditText ) findViewById( R.id.name );
        userPassword = ( EditText ) findViewById( R.id.password );
        enteredUserName = userName.getText().toString().trim(); 
        enteredPassword = userPassword.getText().toString().trim();
    }*/
    /*  while( userName.getText().toString().equals("")  && userPassword.getText().toString().equals("") ) {
        Toast.makeText(CreateAccountActivity.this, "Please enter proper user name and password", Toast.LENGTH_SHORT).show();        
    }*/
    btn.setOnClickListener( this );
}

Edit4

protected void onCreate( Bundle savedInstanceState ) {
    // TODO Auto-generated method stub
    super.onCreate( savedInstanceState );

    setContentView( R.layout.create_account_activity_layout );
    btn = ( Button ) findViewById( R.id.create_account_btn );
    userName = ( EditText ) findViewById( R.id.name );
    userPassword = ( EditText ) findViewById( R.id.password );

    //enteredUserName = userName.getText().toString().trim();
    //enteredPassword = userPassword.getText().toString().trim();

    TextWatcher textWatcher = new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            String enteredUserName = userName.getText().toString();
            String enteredPassword = userPassword.getText().toString();
            if (enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0) {
                Toast.makeText(CreateAccountActivity.this, "test", Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };
    userName.addTextChangedListener(textWatcher);
    userPassword.addTextChangedListener(textWatcher);

    /*
    userName.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) {

             enteredUserName = userName.getText().toString();
             enteredPassword = userPassword.getText().toString();
             if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                   createNewAccount();
             }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    userPassword.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
             enteredUserName = userName.getText().toString();
             enteredPassword = userPassword.getText().toString();
             if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                   createNewAccount();
               }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
    */
    /*while( enteredUserName.toString().isEmpty() || enteredPassword.toString().isEmpty() ) {
        Toast.makeText(CreateAccountActivity.this, "Please enter proper user name and password", Toast.LENGTH_SHORT).show();
        userName = ( EditText ) findViewById( R.id.name );
        userPassword = ( EditText ) findViewById( R.id.password );
        enteredUserName = userName.getText().toString().trim(); 
        enteredPassword = userPassword.getText().toString().trim();
    }*/
    /*  while( userName.getText().toString().equals("")  && userPassword.getText().toString().equals("") ) {
        Toast.makeText(CreateAccountActivity.this, "Please enter proper user name and password", Toast.LENGTH_SHORT).show();
    }*/
    btn.setOnClickListener( this );
}

Upvotes: 0

Views: 724

Answers (7)

Daya Nithi
Daya Nithi

Reputation: 117

You should use

   if ( !TextUtils.isEmpty("enteredUserName")) {
     // createNewAccount();
    }

Upvotes: 0

Konrad Krakowiak
Konrad Krakowiak

Reputation: 12365

Your first solution didn't work because you try to compare instance of your text with instance of String which contains only one space.

The second solution will work, but if user will write space the condition will be validated, so you should trim() your string before you check the condition as is shown in code below:

if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
     createNewAccount();
}

the trim() method remove white marks from your String

Or you can use method isEmpty() from String class

If you want to recognise situation where user change text on EditText you should use TextWatcher as is shown in code below:

  editText.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) {
               String enteredUserName = userName.getText().toString();
               String enteredPassword = userPassword.getText().toString();
               if( enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0){
                   createNewAccount();
               }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

Add TextWatcher as I shown for userName and userPassword

EDIT

Change your onCreate method to the method below:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_account_activity_layout);
    Button btn = (Button) findViewById( R.id.create_account_btn );
    final EditText userName = (EditText) findViewById(R.id.name);
    final EditText userPassword = (EditText) findViewById(R.id.password);
    userName.addTextChangedListener(textWatcher);
    userPassword.addTextChangedListener(textWatcher);
    btn.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String enteredUserName = userName.getText().toString();
            String enteredPassword = userPassword.getText().toString();
            if (enteredUserName.trim().length() != 0 && enteredPassword.trim().length() != 0) {
                createNewAccount();
            }else{
                Toast.makeText(MainActivity2.this, "Fill both fields", Toast.LENGTH_LONG).show();
            }
        }
    });

}

Upvotes: 2

Skizo-ozᴉʞS ツ
Skizo-ozᴉʞS ツ

Reputation: 20616

You can not compare strings with !=, it's not good idea you can compare it with :

-if(enteredUserName.equals("") && enteredPassword.equals(""))

-if(enteredUserName.toString().isEmpty() && enteredPassword.toString().isEmpty()

-if(enteredUserName.matches("") && enteredPassword.matches("")

There are a lot of posibilities to compare it, but those are the most correct IMO.

Hope it helps :)

EDIT

If you want to use length one way to use it would be like :

if (enteredUserName.getText().length() == 0) && (enteredPassword.getText().length() == 0)

EDIT2

Try this logic and let me know if it works.

 String enteredUserName = userName.getText().toString();
 String enteredPassword = userPassword.getText().toString();

 Boolean ok;
 ok = false;
 while (!ok) {
    if (!enteredUserName.equals("") && !enteredPassword.equals("")){
        ok = true;
        createNewAccount();
        //user and password are not empty or you can do your 
    }
    else {
        //do something to repeat this, because user or password is empty
    }
 }

Upvotes: 0

Ludger
Ludger

Reputation: 358

Try this:

 String enteredUserName = userName.getText().toString().trim();
 String enteredPassword = userPassword.getText().toString().trim();

 if( !enteredUserName.equalsIgnoreCase("")
      && !enteredPassword.equalsIgnoreCase("") )
 {
      createNewAccount();
 }

Upvotes: 0

Tugrul
Tugrul

Reputation: 1808

Try this

String enteredUserName = userName.getText().toString();
     String enteredPassword = userPassword.getText().toString();

     if( !enteredUserName.equals("") && !enteredPassword.equals("") ) {
          createNewAccount();
     }

In addition

Read this document http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Other solution

String enteredUserName = userName.getText().toString();
         String enteredPassword = userPassword.getText().toString();

         if( !enteredUserName.isEmpty() && !enteredPassword.isEmpty() ) {
              createNewAccount();
         }

Upvotes: 0

Opiatefuchs
Opiatefuchs

Reputation: 9870

To compare Strings You have to do it like this:

  if( !enteredUserName.equals(" ") && !enteredPassword.equals(" ") ) {
      createNewAccount();
 }

For comparing Strings allways use the method equals() or equalsIgnoreCase() if the capital letters are not important

Upvotes: 1

Lukas Olsen
Lukas Olsen

Reputation: 5464

You did String comparision by = which is not possible - just use

if(!enteredUserName.equals("") && !enteredPassword.equals("")) 

Upvotes: 0

Related Questions