Firebase不添加某些值

时间:2017-04-16 13:59:41

标签: android firebase firebase-realtime-database firebase-authentication firebase-security

以下是我要在firebase数据库上传的数据

{email=t@t.com, name=david ,photoUrl=https://i.stack.imgur.com/tHOLT.png}

在注册屏幕中,我按照以下步骤注册用户:

  1. 使用电子邮件创建用户
  2. 登录用户
  3. 添加用户信息
  4. mAuth.createUserWithEmailAndPassword(binding.inputEmail.getText().toString(),binding.inputPwd.getText().toString())
                        .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                            @Override
                            public void onSuccess(AuthResult authResult) {
                                mAuth.signInWithEmailAndPassword(binding.inputEmail.getText().toString(),binding.inputPwd.getText().toString())
                                        .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                                            @Override
                                            public void onSuccess(AuthResult authResult) {
                                                storeuserdata();
                                            }
                                        })
                                        .addOnFailureListener(new OnFailureListener() {
                                            @Override
                                            public void onFailure(@NonNull Exception e) {
                                                hideProgressDialog();
                                                Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                                            }
                                        });
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                hideProgressDialog();
                                Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        });
    
    
        public void storeuserdata(){
        mUserRefrence.child(uid).setValue(postValues)
                            .addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    hideProgressDialog();
                                    Toast.makeText(SignUpActivity.this, getString(R.string.login_success), Toast.LENGTH_SHORT).show();
    
                                    finish();
                                }
                            }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            hideProgressDialog();
                            Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });
        }
    

    但是当我查看数据库时,它总是会跳过photourl个值和name键值。

    users{
      Ul95OXiNhCM5ydpbdvWC5sfnykz2
        email: "t@t.com"
       photoUrl: ""}
    

    如果您观察到上述结果,则会丢失具有值的name键,并且还会丢失photoUrl值。

    以下是后评估数据

      D/SignUpActivity: storeUserData() called postValues : {email=t@t.com, name=david, photoUrl=https://i.stack.imgur.com/tHOLT.png}
    

    以下是模型类

    class UserData {
    
        private String name;
        private String email;
        private String photoUrl;
    
        public UserData() {
    
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public void setPhotoUrl(String photoUrl) {
            this.photoUrl = photoUrl;
        }
    
        public UserData(String name, String email, Uri photoUrl) {
            this.name = name;
            this.email = email;
            this.photoUrl=photoUrl.toString();
        }
    
    
        @Exclude
        public Map<String, Object> toMap() {
            HashMap<String, Object> result = new HashMap<>();
            result.put("name", name);
            result.put("email", email);
            result.put("photoUrl",photoUrl);
            return result;
        }
    }
    

2 个答案:

答案 0 :(得分:0)

尝试addOnCompleteListener而不是addOnSuccessListener,

 mUserRefrence.child(uid).setValue(postValues)
                    .addOnCompleteListener(new OnCompleteListener<Void>()    {
                        @Override
                        public void onComplete(Void aVoid) {
                            hideProgressDialog();
                            Toast.makeText(SignUpActivity.this, getString(R.string.login_success), Toast.LENGTH_SHORT).show();
                            finish();
                        }
                    })
            });

如果这有助于您,请告诉我。

答案 1 :(得分:0)

您正在使用createUserWithEmailAndPassword创建新用户,这是正确无问题但不需要signInWithEmailAndPassword,因为当您createUserWithEmailAndPassword这意味着您不需要再次验证用户已在您的应用中登录的用户更好地将AuthStateListener添加到FirebaseAuth,而不是在onComplete方法中保存数据。

public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
    FirebaseUser user = firebaseAuth.getCurrentUser();
    if (user != null) {

       storeuserdata();
    } 
}