这是我的数据库的图像:https://i.stack.imgur.com/prxs9.jpg
我想在用户下更新子JtFpeu4kH7YApizjlq6KO4kfKjF2
并添加event_id -L0rlisR_ExF1lMGUTeV
。在这里,JtFpeu4kH7YApizjlq6KO4kfKjF2
是用户在我的应用中使用Firebase注册的用户ID。这不是"推" ID。我正在根据电子邮件搜索。因此,伪代码将是:
找出是否有 email = 'dummy@gmail.com'
的节点。
如果是这样,请在该节点中设置event_id = "-L0rlisR_ExF1lMGUTeV"
。
如果没有,然后将其放在一个名为"无人认领"的新孩子中
但是,使用我的方法,如果找到匹配项,则将Event_ID设置为用子名称为Registered
的用户ID之外的节点。我如何解决这个问题?
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);
}
如果要在一个Registered
中的Events
,则不是:
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
,因此您有另一个叫Registered
的孩子。