2016-05-13 12 views
1

Ich habe eine Anmeldung Aktivität und versuchen, die Felder auf zu validieren REGISTRIEREN BUTTON Klicken Sie auf. Ich benutze setError() Methode, um die Fehlermeldung zu zeigen Seine Arbeit Aber gibt es ein Problem Seine Arbeit auf dem spezifischen Gebiet, das zu dieser Zeit konzentriert hat. Was ich will, sollte es aber alle Felder überprüfen und Meldung bestätigen sollten alle Felder auf einmal ODER Von Top bis zum Ende eines von 1 angezeigt, wenn mehr als 1 Felder Invalidier sindValidierung am EditText funktioniert nicht richtig

Was ich bisher habe, ist Code of SIGN UP BUTTON

if (mSignUpBtn != null) { 
      mSignUpBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 


      public void onClick(View arg0) { 

       assert unameEditText != null; 
       final String uName = unameEditText.getText().toString(); 
       if (!isValidName(uName)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        unameEditText.setError("Invalid Username, Username must be A-Z,a-z,_,0-9 Can't contain Space"); 
       } 
       assert emailEditText != null; 
       final String email = emailEditText.getText().toString(); 
       if (!isValidEmail(email)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        emailEditText.setError("Invalid Email"); 
       } 
       assert passEditText != null; 
       final String pass = passEditText.getText().toString(); 
       if (!isValidPassword(pass)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        passEditText.setError("Invalid Password"); 
       } 
      } 
     }); 
    } 

Code of Validation Methoden

private boolean isValidName(String uName) { 
    String NAME_PATTERN = "[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789_]*"; 

    Pattern pattern = Pattern.compile(NAME_PATTERN); 
    Matcher matcher = pattern.matcher(uName); 
    return matcher.matches(); 
} 

// validating email id 
private boolean isValidEmail(String email) { 
    String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
      + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

    Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
    Matcher matcher = pattern.matcher(email); 
    return matcher.matches(); 
} 

// validating password with retype password 
private boolean isValidPassword(String pass) { 
    return (pass.length() > 6); 
} 

Alles ist in Ordnung, außer dass es auf alle Felder im Auftrag OR durch alle einmal eher bestätigen sollte, als nur die eine

fokussiert

Hier ist Bild, das zeigt, ob USERNAME Field hat Räume in ihm Nachricht seine zeigt Fehler, aber nicht auf E-Mail und Passwort Felder zeigt etwas, weil diejenigen Fokus

enter image description here

Was soll ich es tun beheben nicht sind? Dank

+0

Verwendung dieses Muster 'String REGx = "^ [\\ p {L} .'-] + $";' – sushildlh

+0

Muster Ich denke, richtig, weil, wenn E-Mail-Feld auf Fokus ist es Fehler zeigen auf dieses Feld, wenn es Anti-Muster-Zeichen hat –

Antwort

0

Nehmen Sie einen boolean-Flag und überprüfen Sie es, um zu halten, wie unten zuerst wird es Benutzernamen überprüfen als E-Mail und als passieren

boolean isSave = true; 

if (mSignUpBtn != null) { 
      mSignUpBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 

       assert unameEditText != null; 
       final String uName = unameEditText.getText().toString(); 
       if (!isValidName(uName)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        unameEditText.setError("Invalid Username, Username must be A-Z,a-z,_,0-9 Can't contain Space"); 
        isSave = false; 
       } 
       assert emailEditText != null; 
       final String email = emailEditText.getText().toString(); 
       if (isSave && !isValidEmail(email)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        emailEditText.setError("Invalid Email"); 
        isSave = false; 
       } 
       assert passEditText != null; 
       final String pass = passEditText.getText().toString(); 
       if (isSave && !isValidPassword(pass)) { 
        unameEditText.setVisibility(View.VISIBLE); 
        passEditText.setError("Invalid Password"); 
        isSave = false; 
       } 
      } 
     }); 
    } 
+0

sein nicht funktioniert –

+0

Überprüfen Sie die bearbeitete Antwort, nach mir sollte es von höchster Ordnung arbeiten. –

1

Try this;

public void onClick(View arg0) { 

     assert unameEditText != null; 
     final String uName = unameEditText.getText().toString(); 
     assert emailEditText != null; 
     final String email = emailEditText.getText().toString(); 
     assert passEditText != null; 
     final String pass = passEditText.getText().toString(); 
     if (!isValidName(uName)) { 
      unameEditText.setVisibility(View.VISIBLE); 
      unameEditText.setError("Invalid Username, Username must be A-Z,a-z,_,0-9 Can't contain Space"); 
     }else if (!isValidEmail(email)) { 
      unameEditText.setVisibility(View.VISIBLE); 
      emailEditText.setError("Invalid Email"); 
     }else if (!isValidPassword(pass)) { 
      unameEditText.setVisibility(View.VISIBLE); 
      passEditText.setError("Invalid Password"); 
     } 
    } 
+0

keine Wirkung mit sonst wenn –

Verwandte Themen