Firebase数据库如何从类似WhatsApp聊天页面的节点创建列表

我正在尝试使用Firebase数据库创建聊天应用程序。我正在阅读文档并观看教程,但是有一件事我不知道该怎么做。当用户向另一个用户发送消息时,创建一个聊天室,其密钥为:“ senderUserId_receiverUserId”
您可以在下面看到我的结构。

{
  "chat_rooms" : {
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : {
      "-KtQEGK38lhZrgnNxmqb" : {
        "date" : "07/09/2017 10:28",
        "message" : “Thanks for helping !”,
        "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png",
        "receiverName" : "Ali”,
        "receiverUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1",
        "senderName" : “John”,
        "senderUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2"
      },
      "-KtQEKK2BmIMzwruN-21" : {
        "date" : "07/09/2017 10:28",
        "message" : “Another Test Message“,
        "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png",
        "receiverName" : “John”,
        "receiverUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2",
        "senderName" : "Ali",
        "senderUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1"
      },
      "-KtQIGDk5zE4JZuE9pIQ" : {
        "date" : "07/09/2017 10:45",
        "message" : “Test message !“,
        "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png",
        "receiverName" : “John”,
        "receiverUid" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2",
        "senderName" : "Ali",
        "senderUid" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1"
      }
    }
  },
  "users" : {
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" : {
      "address" : “istanbul”,
      "cell_phone" : “none”,
      "email" : “[email protected]",
      "home_phone" : “none”,
      "name" : “John”,
      "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png",
      "userId" : "nTAHqCTmLRcLOM8CTfnHF4lRjLf2"
    },
    "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : {
      "address" : “istanbul”,
      "cell_phone" : “none”,
      "email" : "[email protected]”,
      "home_phone" : “none”,
      "name" : "Ali",
      "photoUrl" : "http://www.clker.com/cliparts/B/R/Y/m/P/e/blank-profile-hi.png",
      "userId" : "oTLYaHMOMibh3ZqOcmpcWDtSCKp1"
    }
  }
}

通过这种方式,一切正常,但我不知道如何在类似WhatsApp的“聊天”页面的列表中列出用户的所有对话。我的意思是,当用户单击对话项时,相关的对话将打开。
我正在使用以下代码发送私人消息:

public void sendMessageToFirebaseUser(final Context context, final ChatMessageModel chat, final String receiverFirebaseToken) {

        final String room_type_1 = chat.getSenderUid() + "_" + chat.getReceiverUid();
        final String room_type_2 = chat.getReceiverUid() + "_" + chat.getSenderUid();

        final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

        databaseReference.child(Constants.ARG_CHAT_ROOMS)
                .getRef()
                .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot.hasChild(room_type_1)) {
                            Log.e("aaa", "sendMessageToFirebaseUser: " + room_type_1 + " exists");
                            databaseReference.child(Constants.ARG_CHAT_ROOMS)
                                    .child(room_type_1)
                                    .push()
                                    .setValue(chat);
                        } else if (dataSnapshot.hasChild(room_type_2)) {
                            Log.e("aaa", "sendMessageToFirebaseUser: " + room_type_2 + " exists");
                            databaseReference.child(Constants.ARG_CHAT_ROOMS)
                                    .child(room_type_2)
                                    .push()
                                    .setValue(chat);
                        } else {
                            Log.e("aaa", "sendMessageToFirebaseUser: success");
                            databaseReference.child(Constants.ARG_CHAT_ROOMS)
                                    .child(room_type_1)
                                    .push()
                                    .setValue(chat);
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
    }

感谢您阅读我的帖子。

弗兰克·范普菲伦

如果要显示当前用户的聊天室列表,则应对数据进行建模以允许这样做。最简单的方法是将每个用户的聊天室列表添加到数据模型中:

"userChatrooms" : {
  "nTAHqCTmLRcLOM8CTfnHF4lRjLf2" : {
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1": true
  },
  "oTLYaHMOMibh3ZqOcmpcWDtSCKp1" : {
    "nTAHqCTmLRcLOM8CTfnHF4lRjLf2_oTLYaHMOMibh3ZqOcmpcWDtSCKp1": true
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Firebase 数据库的主节点内创建一个节点?

Android-如何创建类似WhatsApp聊天的操作栏?

如何创建类似whatsapp的节标题列表?

如何在不从reactjs中的firebase数据库重新加载页面的情况下获取数据

如何从Firebase数据库参考中获取子节点列表?

用于 2 个节点的聊天应用程序的 Firebase 实时数据库规则

在Firebase实时数据库中创建相同的节点

在 Firebase 数据库中创建节点后,如何防止访问更改?

如何将JSONObject写入Firebase数据库节点

如何防止使用 Firebase 数据库规则删除节点?

如何从Android中的Firebase数据库检索特定节点

如何从Firebase数据库的内部节点读取值?

如何编写查询以从Firebase数据库检索不同的节点?

如何制作类似 WhatsApp 聊天活动的 RecylerView?

PHP如何使用数据库数据创建下拉列表

如何使用Firebase实时数据库中的关联节点名称列表填充“旋转器”?

如何使用Cloud Functions(Typescript)在Firebase Realtime数据库中的.ref(/ path)外部创建新的父节点?

在 Firebase 数据库的情况下,变量名称如何转换为用于创建子节点的文本?

如何使用 Firebase 云数据库支持聊天室中的新消息?

列出Firebase数据库中的节点

从Firebase数据库中删除节点

Firebase数据库规则专用节点

多节点,搜索 Firebase 数据库

如何创建类似消息堆栈的whatsapp(首先是所有聊天屏幕)

如何在扑通聊天中创建类似WhatsApp的Date标头

修复我的Firebase数据库聊天应用程序

用于聊天应用程序的Firebase数据库结构

加密存储在Firebase数据库中的聊天消息

热门构建 Firebase 聊天室数据库?