0

我正在使用Firebase,我正在使用一種方法爲用戶創建一個名爲「createUserWithEmailAndPassword」的帳戶。如何覆蓋createUserWithEmailAndPassword方法的異常?

我在Firebase references中發現此方法異常之一是「FirebaseAuthWeakPasswordException」,它在密碼少於6個字符時調用。

我想趕上這個例外,並顯示用戶的消息與我自己的話, 但是當我纏上嘗試&捕捉的方法我得到這個錯誤:「異常「com.google.firebase.auth.FirebaseAuthWeakPasswordException '永遠不會出現在相應的嘗試塊「中。 我試圖解決這一段時間,但沒有運氣。 這裏是代碼的片段,希望你能幫助我想出解決辦法:

mAuth.createUserWithEmailAndPassword(email, pass) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 

       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        // Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); 

        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 

        if(task.isSuccessful()) 
        { 
         Toast.makeText(getApplicationContext(),"Account has created!",Toast.LENGTH_SHORT).show(); 
        } 
        if (!task.isSuccessful()) { 
         Toast.makeText(getApplicationContext(), "failed!", 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 

      }); 

回答

1

您還沒有加,這就是爲什麼你不能得到正確的錯誤代碼或異常FailureListener的。

將它添加到毛特這樣

mAuth.createUserWithEmailAndPassword(email, pass) 
     .addOnFailureListener(this, new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception e) { 
         if (e instanceof FirebaseAuthException) { 
          ((FirebaseAuthException) e).getErrorCode()); 
          //your other logic goes here 
         } 
        } 
       }) 

不要讓我知道,如果它改變了你什麼。

+0

太謝謝你了! 它現在正在工作,我只是將「e instanceof」更改爲每個可能的異常,完全像我的問題中的參考鏈接: FirebaseAuthWeakPasswordException,FirebaseAuthInvalidCredentialsException和FirebaseAuthUserCollisionException。 – zb22

+0

很高興它:)。祝你好運。 –

1

你需要調用task.getException()然後用instanceof

mAuth.createUserWithEmailAndPassword("[email protected]", "only5") 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      Log.i(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); 

      if (!task.isSuccessful()) { 
       Log.w(TAG, "onComplete: Failed=" + task.getException().getMessage()); 
       if (task.getException() instanceof FirebaseAuthWeakPasswordException) { 
        Toast.makeText(MainActivity.this, "Weak Password", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    }); 
+0

我也很感謝你的方法。對我很有幫助。 –

+0

是的,這是解決它的另一個好方法,謝謝。 在發佈之前,我也嘗試過「task.getException()。getMessage()」,這給出了內置的錯誤消息,使用「instanceof」的方式並未跨越我的想法。 – zb22