我对创建一对一的firbase聊天应用程序感到有点困惑。
我的要求是我需要显示每个用户的聊天列表(用户聊天记录)。一旦用户从列表中单击一个用户,我想要显示所选用户的一对一聊天窗口。
但是我的格式当我向任何用户发送消息时,所有用户都收到了该消息,并且我无法显示特定用户的过滤聊天列表,它显示来自firebase数据库的所有聊天记录
这是我在firebase中的json结构
java代码
static final String CHAT_REFERENCE = "lifegoal";
ChatFirebaseAdapter firebaseAdapter = new ChatFirebaseAdapter(mFirebaseDatabaseReference.child(CHAT_REFERENCE), userModel.getName(), this);
rvListMessage.setLayoutManager(mLinearLayoutManager);
rvListMessage.setAdapter(firebaseAdapter);
答案 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他们已经显示了数据结构,您可以按照
进行操作