Java 如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件)
我是firebase的新手,正在构建一个android应用程序来练习。 我的应用程序非常简单。存在可以创建事件的用户。其他用户可以接受或拒绝活动邀请。 为了简单起见,每当创建事件时,数据库中的所有用户都会被邀请参加该事件 我的数据库当前的结构如下: 我现在想做的是,对于每个活动,我想知道哪些用户已经接受、拒绝或尚未响应邀请 我不确定最好的方法。以下是我的一些想法:Java 如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件),java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我是firebase的新手,正在构建一个android应用程序来练习。 我的应用程序非常简单。存在可以创建事件的用户。其他用户可以接受或拒绝活动邀请。 为了简单起见,每当创建事件时,数据库中的所有用户都会被邀请参加该事件 我的数据库当前的结构如下: 我现在想做的是,对于每个活动,我想知道哪些用户已经接受、拒绝或尚未响应邀请 我不确定最好的方法。以下是我的一些想法: 对于一个事件,创建3个子项,这些子项将存储每个响应选项的所有用户信息。(接受、拒绝、待定) 对于事件,创建一个子“response
Events
eventid1
createdby: userx
eventname: Party
eventid2
createdby: usery
eventname: Meetup
AttendancetoEvent
eventid1
username: userf
response: accepted
eventid1
username: userg
response: rejected
eventid2
username: userg
response: accepted
然后,要获得接受的用户,请执行以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("AttendancetoEvent");
Query queries=ref.child("eventid1").orderByChild("username").equalTo(accepted);
试试这个:
Events
eventid1
createdby: userx
eventname: Party
eventid2
createdby: usery
eventname: Meetup
AttendancetoEvent
eventid1
username: userf
response: accepted
eventid1
username: userg
response: rejected
eventid2
username: userg
response: accepted
然后,要获得接受的用户,请执行以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("AttendancetoEvent");
Query queries=ref.child("eventid1").orderByChild("username").equalTo(accepted);
选项2对我来说似乎最直接:
responses
eventid
uid1: "accepted"
uid2: "rejected"
uid3: "pending"
实际上,您必须为每个用户客户端加载附加信息。由于请求可以通过单个连接进行管道传输,因此这种方法工作良好,性能比大多数开发人员预期的要好得多。有关这方面的更多信息,请参见我的回答:
如果您真的不希望执行客户端连接,那么可以为每个响应存储额外的数据,以便显示它。如果要显示用户名,请执行以下操作:
responses
eventid
uid1
status: "accepted"
displayName: "Ryan Saffar"
这更接近Peter的答案,但这里我们将它们从事件id和uid中去掉。选项2对我来说似乎最直接:
responses
eventid
uid1: "accepted"
uid2: "rejected"
uid3: "pending"
实际上,您必须为每个用户客户端加载附加信息。由于请求可以通过单个连接进行管道传输,因此这种方法工作良好,性能比大多数开发人员预期的要好得多。有关这方面的更多信息,请参见我的回答:
如果您真的不希望执行客户端连接,那么可以为每个响应存储额外的数据,以便显示它。如果要显示用户名,请执行以下操作:
responses
eventid
uid1
status: "accepted"
displayName: "Ryan Saffar"
这更接近Peter的答案,但这里我们将它们从事件id和uid中去掉。好吧,我只是说,你做的一切都是对的。对于Events节点,可以对随机分支名称使用.push()函数。让我们开始吧,每个用户都有一个UID,好吗?用户的数据特别存储在那里,包括他们的名字,这就完成了。现在用户发布一个事件,将该事件推送到事件,现在在UID节点中创建用户事件的arrayList。因此,当您上载该事件时,您将获得它的引用并将其存储在UID分支中,以便用户可以检索其所有事件。 对于已接受、挂起或拒绝的选项,我希望您正在构建的任何东西都有用于这些功能的按钮。 现在onClickListener()存储用户的 在arrayList中为任何选项添加Uid,并将其上载到检索到的事件的分支。为此,在事件模型类中添加一个字符串作为路径引用,这样您就可以在那里上传选择。都做完了。 现在,如果用户想要知道谁接受、拒绝或有待定选项,您可以使用arrayList中的UID显示用户名。我建议使用uid,因为这只是为了万一事件上传者想要获得更多选择了任何选项的用户数据。
我认为这会很好。嗯,我只是说,你做的每件事都是对的。对于Events节点,可以对随机分支名称使用.push()函数。让我们开始吧,每个用户都有一个UID,好吗?用户的数据特别存储在那里,包括他们的名字,这就完成了。现在用户发布一个事件,将该事件推送到事件,现在在UID节点中创建用户事件的arrayList。因此,当您上载该事件时,您将获得它的引用并将其存储在UID分支中,以便用户可以检索其所有事件。 对于已接受、挂起或拒绝的选项,我希望您正在构建的任何东西都有用于这些功能的按钮。 现在onClickListener()存储用户的 在arrayList中为任何选项添加Uid,并将其上载到检索到的事件的分支。为此,在事件模型类中添加一个字符串作为路径引用,这样您就可以在那里上传选择。都做完了。 现在,如果用户想要知道谁接受、拒绝或有待定选项,您可以使用arrayList中的UID显示用户名。我建议使用uid,因为这只是为了万一事件上传者想要获得更多选择了任何选项的用户数据。 我认为这会很好