【问题标题】:Firebase Not Adding some ValuesFirebase 未添加某些值
【发布时间】:2017-04-16 13:59:40
【问题描述】:

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

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

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

  1. 使用电子邮件创建用户
  2. 登录用户
  3. 添加用户信息

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

【问题讨论】:

  • 请提供 postValues 变量数据
  • {email=t@t.com, name=david ,photoUrl=i.stack.imgur.com/tHOLT.png}
  • 我展示了第一行,但你可能会遗漏一些东西是你的模型类是类模型{ String email;字符串照片网址; }
  • 您的插入没有问题,但是您的模型类的值可能有问题 print Model class value with the log to test.
  • 我已经打印了日志值,一切正常

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


【解决方案1】:

尝试使用 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();
                        }
                    })
            });

如果这对你有帮助,请告诉我。

【讨论】:

  • 在没有完成活动的情况下检查一次。
【解决方案2】:

您正在使用createUserWithEmailAndPassword 创建新用户,这是正确的,没有问题,但不需要signInWithEmailAndPassword,因为当您使用createUserWithEmailAndPassword 时,这意味着您不需要再次验证用户身份,用户已经签名在您的应用中,最好将AuthStateListener 添加到您的FirebaseAuth,而不是将数据保存在onComplete 方法中。

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

       storeuserdata();
    } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2020-02-10
    • 2020-12-01
    • 2021-03-14
    • 2014-03-24
    相关资源
    最近更新 更多