当前位置: 首页 > 知识库问答 >
问题:

用条件从firebase中检索数据

祁高格
2023-03-14

我试图实现一对一聊天使用firebase实时数据库,我插入消息与senderid,Recieverid,消息,日期,sendername,Recievername,在我的情况下,不同的用户是不同的聊天室,我需要展示这个聊天室一对一聊天室我如何实现在我的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");
    }


      }

但这段代码从聊天室获取所有数据,但我需要排除发送者名和接收者名相等的消息,sendername是从应用程序用户获得的,而reciever name是聊天室的名称,

共有1个答案

袁翰池
2023-03-14

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

Firebase的查询模型比使用普通关系DBMS得到的查询模型稍有限制。这意味着您不能像以前那样依赖查询。

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

userChatrooms
  userid1
    chatroom1: true
    chatroom2: true
  userid2
    chatroom1: true
    chatroom3: true
chatrooms
  chatroom1
    chatmsg1
      senderid: ...
      receiverid: ...
 类似资料:
  • 其中mDatabase是对Firebase数据库的引用,而num是用于检索随机问题的随机值。我已经为4个选项重复了上述代码a 4次,但当我有2个选项时,如上面提到的和数据库结构中所示,我的应用程序停止工作。 我们将非常感谢所有的帮助。

  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • 我对Firebase和Android是新手。我已经在我的Firebase帐户中存储了用户身份验证详细信息(姓名、个人资料图像而不是电子邮件ID)。我想检索那些数据(如姓名等)到我的应用程序的其他部分。如何检索实时数据库子值?

  • 我有一个名为employee_comp_field的表,其中提供了薪资字段 然后,我有另一个表,其中员工工资数据存储emp_compensation每个字段。正如你所看到的emp_id 10有三套记录,因为他在同一年获得了三次加薪(year_id=101),这可以通过salary_order领域来识别。 我想用最大工资确定所有雇员的名单,我的期望输出如下: emp_id10号得到了三次加薪……所以

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地: