首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android中展示firebase的聊天列表

如何在android中展示firebase的聊天列表
EN

Stack Overflow用户
提问于 2018-02-08 18:01:27
回答 1查看 1.1K关注 0票数 0

我想按顺序显示聊天频道。例如首先显示最近添加消息频道。代码:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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");

数据库结构为:

代码语言:javascript
复制
{
  "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会按他们创建的顺序显示频道。但我希望他们像我们在简单的移动消息应用程序中一样订购。我已经搜索了很多关于它的东西,但没有找到任何关于这个场景的东西。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 20:06:35

因为Firebase不会自动存储元数据,所以您需要自己存储元数据。要实现这些功能,您需要为您的两个部分channelsmessages添加一个TIMESTAMP属性。这将帮助您根据接收到的最后一条消息的日期和时间对通道中的消息进行排序。如果您希望根据相同的规则对通道进行排序,则每次收到消息时,请使用最后一条消息的TIMESTAMP更改通道的TIMESTAMP字段。这样,通道还将按上次接收的消息的日期和时间进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48682629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档