gpt4 book ai didi

java - 如何根据另一个子项的值更新数据库中的某个值?

转载 作者:行者123 更新时间:2023-12-02 11:50:16 26 4
gpt4 key购买 nike

这是我的数据库的图像:/image/prxs9.jpg

我想更新 users 下的子 JtFpeu4kH7YApizjlq6KO4kfKjF2 并添加 event_id -L0rlisR_ExF1lMGUTeV。此处,JtFpeu4kH7YApizjlq6KO4kfKjF2 是用户在我的应用中使用 Firebase 注册时生成的用户 ID。这不是“推送”ID。我正在根据电子邮件进行搜索。因此,伪代码将是:

查找是否存在 email = 'dummy@gmail.com' 的节点。

如果是这样,则在该节点中设置 event_id = "-L0rlisR_ExF1lMGUTeV"

如果没有,则将其放入一个名为“unclaimed”的新子项中(这是有效的)

但是按照我的方法,如果找到匹配项,则 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);



}

最佳答案

如果您希望将 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,因此您有另一个名为Registered的子项。

关于java - 如何根据另一个子项的值更新数据库中的某个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47919950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com