2016-05-13 64 views
1

我有一個註冊活動並試圖驗證上的字段註冊按鈕單擊。我正在使用setError()方法顯示錯誤消息它的工作但是有一個問題它在當時專注於特定領域的工作。我想是應該由1檢查所有的字段和驗證消息應該出現在所有領域的一次OR從頂到底的,如果超過1個字段是無效在EditText上驗證無法正常工作

我至今是 註冊按鈕的代碼

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"); 
       } 
      } 
     }); 
    } 

代碼的驗證方法

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); 
} 

一切都很好,除了它應該在驗證通過才能所有領域的所有一次,而不是僅僅關注一個

這裏是圖像顯示,如果USERNAME場是有空格的顯示錯誤消息,但不顯示任何電子郵件和密碼字段,因爲這些都不是焦點處

enter image description here

我應該怎麼做來解決它?由於

+0

使用此圖案 '字符串至REGx = 「^ [\\ p {L} .'-] + $」;' – sushildlh

+0

圖案我認爲正確的,因爲當電子郵件字段是焦點它顯示在錯誤該字段,如果它具有反模式字符 –

回答

0

以一個布爾標誌,並檢查它維持秩序,下面首先它會檢查用戶名不是電子郵件,比通過

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

它不起作用 –

+0

檢查編輯答案,根據我應該從最高秩序工作。 –

1

試試這個;

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

如果沒有效果 –