这是我的数据库的图像:https://imgur.com/a/AfZXS
我想更新用户下的子JtFpeu4kH7YApizjlq6KO4kfKjF2
并添加event_id -L0rlisR_ExF1lMGUTeV
。此处,JtFpeu4kH7YApizjlq6KO4kfKjF2
是用户在我的应用中使用Firebase注册时生成的用户ID。这不是推动' ID。我正在搜索基于电子邮件。所以,伪代码将是:
查明是否存在email = 'dummy@gmail.com'
的节点。
如果是,请在该节点中设置event_id = "-L0rlisR_ExF1lMGUTeV"
。
如果没有,那就把它放在一个名为“无人认领”的新孩子身上(这是有效的)
但是根据我的方法,如果找到匹配项,则event_id将设置为userId之外的节点,子项名称为Registered
。我该如何解决这个问题?
final DatabaseReference RegUserCheck = FirebaseDatabase.getInstance().getReference().child("Users").child("Registered");
RegUserCheck.orderByChild("Email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.getValue() == null) {
/*This adds to a child called 'unclaimed' since the
email doesn't exist. This is working correctly*/
DatabaseReference Unclaimed = FirebaseDatabase.getInstance().getReference().child("Users").child("Unclaimed").push();
Unclaimed.child("Email").setValue(email);
Unclaimed.child("Events").setValue(event_key);
}
else
{
/* THE FOLLOWING LINE JUST TAKES 'REGISTERED' AS THE KEY */
RegUserCheck.child(dataSnapshot.getKey()).child("Events").setValue(event_key);
}
答案 0 :(得分:1)
如果您希望Events
位于一个Registered
内,请代替此:
RegUserCheck.child(dataSnapshot.getKey()).child("Events").setValue(event_key);
这样做:
RegUserCheck.child("Events").setValue(event_key);
这样你就有了:
Registered
email: email@gmail.com
User_id: id_here
Events: -event_key
你得到额外Registered
的原因是因为这个child(dataSnapshot.getKey())
添加了一个带有dataSnapshot密钥的子项,而dataSnapshot在这里等于Registered
因此你得到另一个名为{的孩子{1}}。