2016-08-28 23 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