我想按顺序显示聊天频道。就像显示那个最近添加了消息的频道一样。代码:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.child("dummy").setValue(0);
myRef.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if(dataSnapshot != null)
{
names.clear();
for (DataSnapshot child : dataSnapshot.getChildren())
{
String name = child.getKey();
if(!child.getKey().equals("dummy") && child.getKey().contains(phoneNumber))
names.add(name);
}
peopleAdatper = new PeopleAdatper(getApplicationContext(),names,users);
listView.setAdapter(peopleAdatper);
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
我的ChatMessage
课程:
ChatMessage chatMessage = new ChatMessage();
chatMessage.setMessageText(messageEditText.getText().toString());
chatMessage.setNo(parentRef);
chatMessage.setName(sharedPreferences.getString("nickname",""));
chatMessage.setDuration(duration);
long time = SystemClock.currentThreadTimeMillis();
chatMessage.setMessageTime(time);
myRef.push().setValue(chatMessage);
myRef.child(childRef).setValue("new");
和数据库结构是:
{
"0300****644_0333****366" : {
"-L4b9UHJGuIV311odBXz" : {
"duration" : "",
"messageText" : "hel",
"messageTime" : 0,
"name" : "Bilal Shahid",
"no" : "0300****644"
},
"0300****644" : "seen",
"0333****366" : "seen",
"dummy" : 0
},
通常firebase按照他们创建的顺序显示频道。但我希望他们像我们在简单的移动消息应用程序中订购。我已经搜索了很多关于它的信息,但没有找到任何关于这种情况的事情。谢谢
答案 0 :(得分:0)
由于Firebase不会自动存储元数据,因此您需要自己执行此操作。要实现您的目标,您需要为两个部分TIMESTAMP
和channels
添加messages
属性。这将帮助您根据收到的最后一条消息的日期和时间对通道内的消息进行排序。如果您想根据相同的规则对频道进行排序,则每次收到邮件时,请使用上一条邮件的TIMESTAMP
更改频道的TIMESTAMP
字段。通过这种方式,频道也将按照上次收到的消息的日期和时间进行排序。