【问题标题】:Retrive data from firebase with conditions从带有条件的firebase中检索数据
【发布时间】:2016-11-26 06:03:14
【问题描述】:

我正在尝试使用 firebase 实时数据库实现一对一聊天,我使用 senderidRecieveridmessage 插入消息,日期,发件人姓名收件人姓名, 在我的情况下,不同的用户是不同的聊天室,我需要为一对一的聊天室显示这个聊天室我如何在我的 android 应用程序中实现

这是我检索数据的代码

private void append_chat_conversation(DataSnapshot dataSnapshot) {

    Iterator i = dataSnapshot.getChildren().iterator();

    while (i.hasNext()){
        RecieverrId = (String) ((DataSnapshot)i.next()).getValue();
        datee = (String) ((DataSnapshot)i.next()).getValue();
        chat_msg = (String) ((DataSnapshot)i.next()).getValue();
        receiverrname = (String) ((DataSnapshot)i.next()).getValue();
        senderrid = (String) ((DataSnapshot)i.next()).getValue();
        chat_user_name = (String) ((DataSnapshot)i.next()).getValue();

        chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
    }


      }

但是这段代码从那个聊天室获取所有数据, 但我需要显示发件人姓名和收件人姓名相同的消息,发件人姓名来自应用用户,收件人姓名是聊天室的名称,

请帮我解决这个问题

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您似乎以一种在 SQL 数据库中建模的方式对聊天数据建模:一个包含行的单个表。您需要重新考虑此数据模型以更好地适应 NoSQL 系统。

    Firebase 的查询模型比您使用普通关系 DBMS 获得的模型更有限。这意味着您不能像过去那样依赖查询。

    另一方面:Firebase 数据库允许非常灵活的数据建模。这反过来意味着您可以经常调整您的数据模型以允许您的应用程序需要的查询。这是使用 NoSQL 数据库时的一个常见主题:您应该对数据进行建模以适应您的应用程序想要使用它的方式。这通常意味着您的数据模型与您在应用的各个屏幕中显示的内容非常匹配。

    对于聊天应用,您可能会显示用户的聊天室列表或该用户所属的单个聊天室。因此,鉴于我刚才所说的,我们应该在数据库中对这些确切的项目进行建模。

    userChatrooms
      userid1
        chatroom1: true
        chatroom2: true
      userid2
        chatroom1: true
        chatroom3: true
    chatrooms
      chatroom1
        chatmsg1
          senderid: ...
          receiverid: ...
    

    使用此模型,您现在可以轻松确定用户的聊天室列表:/userChatrooms/{aut.uid}

    如需了解精彩介绍,请阅读Firebase documentation on data structuring、此article on NoSQL data modeling 并观看我们的视频系列Firebase for SQL developers

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 2018-02-10
      • 2016-11-19
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多