Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件)_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件)

Java 如何在Firebase中最好地存储其他数据库对象的ID(例如:用户事件),java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我是firebase的新手,正在构建一个android应用程序来练习。 我的应用程序非常简单。存在可以创建事件的用户。其他用户可以接受或拒绝活动邀请。 为了简单起见,每当创建事件时,数据库中的所有用户都会被邀请参加该事件 我的数据库当前的结构如下: 我现在想做的是,对于每个活动,我想知道哪些用户已经接受、拒绝或尚未响应邀请 我不确定最好的方法。以下是我的一些想法: 对于一个事件,创建3个子项,这些子项将存储每个响应选项的所有用户信息。(接受、拒绝、待定) 对于事件,创建一个子“response

我是firebase的新手,正在构建一个android应用程序来练习。 我的应用程序非常简单。存在可以创建事件的用户。其他用户可以接受或拒绝活动邀请。 为了简单起见,每当创建事件时,数据库中的所有用户都会被邀请参加该事件

我的数据库当前的结构如下:

我现在想做的是,对于每个活动,我想知道哪些用户已经接受、拒绝或尚未响应邀请

我不确定最好的方法。以下是我的一些想法:

  • 对于一个事件,创建3个子项,这些子项将存储每个响应选项的所有用户信息。(接受、拒绝、待定)

  • 对于事件,创建一个子“responses”,该子“responses”将每个用户的uid作为一个键,其值可以是“accepted”、“rejected”或“pending”

  • 完全是另一回事

  • 选项1似乎可以工作,但这意味着用户数据将被复制到整个数据库中。如果一个用户被邀请参加1000个活动,那么每个活动中都会有该用户1000次的副本

    选项2在我看来似乎是合乎逻辑的,但是我已经尝试过实现它,并且在构建firebase查询时遇到了困难。如果我想要所有接受的用户,我需要获取“acceptedUsers”子节点的所有UID,然后从“users”节点中取出与这些UID匹配的所有子节点。这似乎不可能

    任何帮助或指导都将不胜感激

    试试这个:

    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,因为这只是为了万一事件上传者想要获得更多选择了任何选项的用户数据。 我认为这会很好