【问题标题】:Firebase query startAt() doesnt return any value?Firebase 查询 start() 不返回任何值?
【发布时间】:2020-07-25 17:57:18
【问题描述】:

在我的聊天应用程序中。我只想接收最近添加的消息,所以我试图通过查询 startAt() 接收消息,但查询不返回任何数据。

请帮我找出我犯错的地方:

这是我的数据结构:(My Datastructure image)

-聊天
-TrHRsy8x7WYZjodQrNrzfumw16z2g2dojhGBdie07PXqhl47l8GWN1a2
-LastMessage
-消息
-MCi-gOmhLUl5MuLtCiI
-MCi-hstmFyAfAczexvI
LT: -11108656
电话:1595278548931
c: 2
米:“嗨”
r:“g2dojhGBdie07PXqhl47l8GWN1a2”
s:“TrHRsy8x7WYZjodQrNrzfumw16z2”
-MCi-kukmwJpU3ubswId

  Query ref2 = FirebaseDatabase.getInstance().getReference("Chats/" + uniquechatid()).child("Messages").orderByChild("T").startAt("1595278548931");

        receiveListener = ref2.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) 
            {
                if (snapshot.getValue() != null) {
                    Chat chat = snapshot.getValue(Chat.class);
                    assert chat != null;
                    Log.e("chat added",chat.getM());
                }
            }
});

我只想接收来自这些时间戳的消息。我什至尝试了 startAt(value,key) .startAt() 不起作用。如果我删除 startAt() 则数据接收完美。

我的消息上传:

  private void sendMessage(String sender, String receiver, String message) {

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

        HashMap<String, Object> hashmap = new HashMap<>();
        hashmap.put("s", sender);
        hashmap.put("r", receiver);
        hashmap.put("m", message);
        hashmap.put("c", 1);
        hashmap.put("T",ServerValue.TIMESTAMP);
        hashmap.put("LT",timenow);

        reference.child("Chats/"+uniquechatid()+"/Messages").push().setValue(hashmap);
       
    }

我的数据库规则:

{
  "rules": {
    ".read": true,
    ".write": true,
     "Chats": {
       "$chatid":{
         "Messages":{
         "$messageid":{
           ".indexOn": "T"  
         }   
         }
       }
    }
  }
  
}

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    图片中有一个 Messages 的孩子。你的 ref2 应该是这样的

    Query ref2 = FirebaseDatabase.getInstance().getReference("Chats/" + uniquechatid()).child("Messages/" +"MCi-hstmFyAfAczexvI").orderByChild("T").startAt("1595278548931");
    
        receiveListener = ref2.addChildEventListener(new ChildEventListener() {
    
            @Override
            public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) 
            {
                if (snapshot.getValue() != null) {
                    Chat chat = snapshot.getValue(Chat.class);
                    assert chat != null;
                    Log.e("chat added",chat.getM());
                }
            }
    

    });

    提供消息 ID 或您用于存储不同消息的 ID 作为消息的子级。

    【讨论】:

    • 你能帮助我如何访问由 firebase 生成的唯一聊天 ID 以附加到我的查询中。
    • 当然!请在您上传消息的地方显示您的完整代码。
    • 就像您通过聊天访问uniquechatid() 一样,对于消息也一样。它无法访问T
    • 好的,非常感谢。首先我现在试试这个方法,看看它是否有效,如果我有疑问,我会回来。
    • 没问题,如果有用的话你可以给我点赞:p
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多