我正在尝试检索当我注册并在我的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);
答案 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”变量
中的密钥下