gpt4 book ai didi

java - Firebase - 查询嵌套键?

转载 作者:行者123 更新时间:2023-12-02 02:09:55 25 4
gpt4 key购买 nike

我正在运行一个 Android 应用程序,用于处理有关 Activity 和受邀参加 Activity 的用户 的一些数据。我有一个页面需要显示用户被邀请参加的所有 Activity ,但我对 Firebase 比较陌生,并且不确定查询语法如何适用于我当前的数据结构。

我的数据结构示例(带有虚拟键)如下所示:

events
event1_key
eventName: "test event"
eventAdmin: "userAdmin"
eventInvites
user1_key
attending: true
responseTimestamp: 1525416294951
user2_key
//...
event2_key
//...
eventInvites
user2_key
//...
user3_key
//...

因此,使用此示例,如果我正在查找 user1_key 已被邀请参加的所有 Activity ,则查询应仅返回 event1_key 记录,因为该记录具有user1_key 的嵌套 eventInvite

如果我在 Android Studio 的 Java 中运行该查询,有人知道它应该是什么样子吗?

最佳答案

在这种情况下,我认为您需要将数据复制到另一个节点中。现在,您有一个保存所有事件的节点(即 events 节点)。我建议您也为用户创建一个单独的表(即单独的节点)。

该节点结构可能如下所示。

users 
user1_key
events1_key
events2_key
...
user2_key
events5_key
events2_key
....
....

这样您就不需要任何嵌套查找。当您在 events 节点下插入数据时,只需复制此节点中的数据即可。

希望有帮助!

更新

如果您正在考虑复制表,那么检查用户是否参加 Activity 将非常简单,如下所示。

userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
boolean attending = false;
for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
if(eventSnapshot.getKey().equals(THE_DESIRED_EVENT)) {
attending = true;
break;
}
}

if(attending) doSomethingAsUserIsFoundToBeAttendingTheEvent();
else userIsNotAttending();
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

代码没有经过测试,我只是有伪实现。请根据您的需要进行修改。

关于java - Firebase - 查询嵌套键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178171/

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