Android firebase中生成的按键不等于正在检索的按键

Android firebase中生成的按键不等于正在检索的按键,android,firebase-realtime-database,Android,Firebase Realtime Database,我正在尝试检索当我注册并在我的android应用程序中创建新用户时生成的按键。但是检索的密钥与创建的密钥不同。这怎么可能?这是我的代码。我如何更正它 firebaseAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Ov

我正在尝试检索当我注册并在我的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);
firebaseAuth.createUserWithEmailAndPassword(电子邮件,密码)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
//检查是否成功
if(task.issusccessful()){
id=firebaseAuth.getCurrentUser().getUid();
key=databaseReference1.child(sexs.push().getKey();
Log.d(“用户密钥”,密钥);
用户=新用户(用户名、门厅、级别、下载URL、id、密钥);
databaseReference1.child(sexs.push().setValue(user);

您似乎混淆了Firebase身份验证用户ID(通常称为UID)和Firebase数据库推送ID(在数据库引用中调用
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);

由于再次调用
push()
,您将获得不同的密钥

databaseReference1.child(sexs).push().setValue(user);
相反,您应该执行以下操作:

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

这将把用户存储在您生成并存储在“key”变量中的key下。请不要这样做!我非常理解其中的区别。我想检索在“databaseReference1.child(sexs).push().setValue(user);”中调用push()后生成的push ID。这段代码应该是这样做的“key=databaseReference1.child”(sexs.push().getKey();“但是我得到的值是不同的。我不明白为什么@FrankvanPuffelenI添加了一个解释。