我想按顺序显示聊天频道。例如首先显示最近添加消息频道。代码:
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会按他们创建的顺序显示频道。但我希望他们像我们在简单的移动消息应用程序中一样订购。我已经搜索了很多关于它的东西,但没有找到任何关于这个场景的东西。谢谢
发布于 2018-02-08 20:06:35
因为Firebase不会自动存储元数据,所以您需要自己存储元数据。要实现这些功能,您需要为您的两个部分channels和messages添加一个TIMESTAMP属性。这将帮助您根据接收到的最后一条消息的日期和时间对通道中的消息进行排序。如果您希望根据相同的规则对通道进行排序,则每次收到消息时,请使用最后一条消息的TIMESTAMP更改通道的TIMESTAMP字段。这样,通道还将按上次接收的消息的日期和时间进行排序。
https://stackoverflow.com/questions/48682629
复制相似问题