Firebase一对一聊天android

时间:2016-07-26 07:34:27

标签: android firebase firebase-realtime-database

我对创建一对一的firbase聊天应用程序感到有点困惑。

我的要求是我需要显示每个用户的聊天列表(用户聊天记录)。一旦用户从列表中单击一个用户,我想要显示所选用户的一对一聊天窗口。

但是我的格式当我向任何用户发送消息时,所有用户都收到了该消息,并且我无法显示特定用户的过滤聊天列表,它显示来自firebase数据库的所有聊天记录

这是我在firebase中的json结构

enter image description here

java代码

    static final String CHAT_REFERENCE = "lifegoal";

ChatFirebaseAdapter firebaseAdapter = new  ChatFirebaseAdapter(mFirebaseDatabaseReference.child(CHAT_REFERENCE), userModel.getName(), this);
    rvListMessage.setLayoutManager(mLinearLayoutManager);
    rvListMessage.setAdapter(firebaseAdapter);

2 个答案:

答案 0 :(得分:4)

首先,您必须更改数据库的结构方式,以便为每个一对一聊天创建新的线程或会话ID。例如,您可以尝试这样的事情:

- lifegoal
    - senderId-receiverId
        - KNa0...
            - message
            - timestamp
            + usermodel

这将允许您为两个用户创建唯一的新threadId。

唯一需要注意的是,您需要检查哪个孩子在firebase中有效,才能知道要使用哪个孩子。例如,您可以尝试这样的事情:

String type_1 = senderId + "_" + receiverId; String type_2 = receiverId + "_" + senderId;

然后检查您的onDataChange()回调,如下所示:

   `@Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.hasChild(type_1)) {
            // do something...
        } else if (dataSnapshot.hasChild(type_2)) {
            // do something...
        } else {
            // do something...
        }
    }`

答案 1 :(得分:-1)

我认为您的数据保存格式是错误的。您正在整个线程中发送消息,即lifegoal,您需要将其发送到存储单个用户转换的单个线程。看看这些链接

Firebase : Build a real time chat
Firebase Chat for Android
bonfire-firebase-sample

以上链接将向您展示firebase聊天的工作原理以及您应遵循的DataModel类型。

Here他们已经显示了数据结构,您可以按照

进行操作