2016-08-28 43 views
0

我是全新的Android學習者所以它很難對我做的東西,我不能在文檔中找到。這裏是我創建用戶的代碼創建名新用戶,用戶名等在火力

mAuth.createUserWithEmailAndPassword(email,password) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if(task.isSuccessful()){ 
         //Successfully Registered 
         Toast.makeText(RegisterActivity.this, "Registration Successful", Toast.LENGTH_SHORT).show(); 
        }else { 
         //Error occurred during registration 
         Toast.makeText(RegisterActivity.this, "Registration Unsuccessful", Toast.LENGTH_SHORT).show(); 
         try { 
          throw task.getException(); 
         } catch(FirebaseAuthWeakPasswordException e) { 
          editTextPassword.setError(e.getMessage()); 
          editTextPassword.requestFocus(); 
         }catch(FirebaseAuthUserCollisionException | FirebaseAuthInvalidCredentialsException e) { 
          editTextEmail.setError(e.getMessage()); 
          editTextEmail.requestFocus(); 
         } catch(Exception e) { 
          Log.e(RegisterActivity.class.getName(), e.getMessage()); 
         } 
        } 
        progressDialog.dismiss(); 
       } 
      }); 

這隻需要兩個參數(電子郵件和密碼)來創建用戶。要創建更多字段的用戶,我應該採取什麼方法。

我還添加了一個FirebaseAuth.AuthStateListener()檢查用戶的登錄狀態。但是,當我以後打電話firebaseAuth.getCurrentUser().getDisplayName()用戶成功登錄返回null作爲usual.So我怎麼可以創建用戶名,所以我可以用firebaseAuth.getCurrentUser().getDisplayName()檢索。

+0

你有沒有試過, https://firebase.google.com/docs/auth/android/manage-用戶#update_a_users_profile – srijanshukla

+1

@srijanshukla感謝您提供文檔鏈接。其實我不知道正確的做法。 – Sp4Rx

+0

誰能告訴我哪一個是這兩個答案中的一個好習慣? – Sp4Rx

回答

0

註冊成功後,

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 

UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() 
     .setDisplayName("Jane Q. User") 
     .build(); 

編輯:此代碼有點不完整,因爲profileUpdates永遠不會被訪問。

user.updateProfile(profileUpdates) 
    .addOnCompleteListener(new OnCompleteListener<Void>() { 
     @Override 
     public void onComplete(@NonNull Task<Void> task) { 
      if (task.isSuccessful()) { 
       Log.d(TAG, "User profile updated."); 
      } 
     } 
    }); 

然後,進行檢索,使用任何需要的地方,

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Name, email address etc 
    String name = user.getDisplayName(); 
    String email = user.getEmail(); 
} 
+1

這就是我想要感謝。 – Sp4Rx

+0

它總是會爲getDisplayName()提供空指針異常。 –

+0

@kshitijjain但有一個條件,如果已經到對證 – srijanshukla

2

要額外信息的用戶添加諸如用戶名,也應該電子郵件地址和密碼登錄成功完成後生成的唯一USER_ID下使用火力地堡實時數據庫存儲這些數據的其他必要信息。在登記表名

獲取用戶輸入,

String name = mNameField.getText().toString().trim(); 

添加用戶在onComplete方法名稱:

@Override 
public void onComplete(@NonNull Task<AuthResult> task) { 
if(task.isSuccessful()){ 

    String user_id = mAuth.getCurrentUser().getUid; 

    DatabaseReference current_user = mDatabase.child(user_id); 

    current_user.child("name").setValue(name); 

    progressDialog.dismiss(); 

    } 
+0

對於規則規則,可以對註冊過程中的'uid'節點下的寫入進行修改,而不是設置'「.read」:true,「.write」:true'。 讓我們假設我的樹結構的根 - >用戶 - > UID - >名@ramithdr – Sp4Rx