在firebase中生成的push key不等于正在检索android

时间:2017-04-01 00:28:18

标签: android firebase-realtime-database

我正在尝试检索当我注册并在我的Android应用中创建新用户时生成的推送键。但是检索到的密钥与创建的密钥不同。这有可能吗?这是我的代码。我怎么纠正它?

 firebaseAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        //checking if success
                        if(task.isSuccessful()){

                              id = firebaseAuth.getCurrentUser().getUid();
                             key = databaseReference1.child(sexs).push().getKey();
                            Log.d("User key", key);
                            User user = new User(username, halls, levels, downloadUrl, id, key );




                            databaseReference1.child(sexs).push().setValue(user);

2 个答案:

答案 0 :(得分:1)

您似乎将Firebase身份验证用户ID(通常称为UID)与Firebase数据库推送ID混淆(在DatabaseReference中调用push()时生成。)它们是非常不同的野兽 - 几乎是他们所拥有的唯一东西常见的是,他们识别某些东西,从而使其独一无二。

如果我正确理解您的代码,您希望将新创建的用户信息存储在Firebase数据库中。代码是:

databaseReference.child(id).setValue(user);

<强>更新

每次拨打push()时,都会生成一个新的唯一ID位置。由于您的代码调用push()两次(一次提取密钥,一次将值设置到数据库),这将是两个不同的位置。

要获取该位置的密钥,请务必仅拨打push()一次:

id = firebaseAuth.getCurrentUser().getUid();
User user = new User(username, halls, levels, downloadUrl, id, key );

DatabaseReference newRef = databaseReference1.child(sexs).push();
key = newRef.getKey();
Log.d("User key", key);
newRef.setValue(user);

答案 1 :(得分:0)

您正在获取另一个密钥,因为您再次呼叫push()

databaseReference1.child(sexs).push().setValue(user);

相反,您应该执行以下操作:

databaseReference1.child(sexs).child(key).setValue(user);

这会将用户存储在您生成并存储在“key”变量

中的密钥下