代码之家  ›  专栏  ›  技术社区  ›  DeveloperKurt

Firebase查询limitToLast未按预期工作

  •  2
  • DeveloperKurt  · 技术社区  · 7 年前

    在我的Firebase数据库中,有一些值存储在push keys下,我试图通过它们的键从 . 问题是 不是从钥匙开始的 最后10位 . 那把钥匙是 这段代码是第一次初始化的,也是应该初始化的最后10个代码中的第一个。但新的数据已经被添加和更新 即使重新安装,也要重新启动应用程序。 如果我把这个号码改成别的号码,它就可以正常工作,直到我向数据库中添加新消息为止。同样的事情也发生在这个数字上。

    注意:传递给conversationsRef的ConversationPushID(string)是正确的,数据结构是正确的,只是为了确保共享它们,我检查了它。

     final  DatabaseReference conversationsRef = firebaseInstance.rootRef
                            .child(mContext.getString(R.string.dbname_conversations))
                            .child(ConversationPushID);
    
    Query getLastMessagesQuery = conversationsRef.orderByKey().limitToLast(10);
    
                            getLastMessagesQuery.addListenerForSingleValueEvent(new ValueEventListener()
                                {
                                    @Override
                                    public void onDataChange(@NonNull DataSnapshot snap)
                                        {
    
                                            for (DataSnapshot dataSnapshot : snap.getChildren())
                                                {
                                                    Message message = dataSnapshot.getValue(Message.class);
    
                                                    String messageKey = dataSnapshot.getKey();
                                                    messageList.add(message);
    
                                                }         
                                            getLastMessageFromListener = false;
                                            setListenerForLastMessage();                                        
                                        }
    
                                    @Override
                                    public void onCancelled(@NonNull DatabaseError databaseError)
                                        {
    
                                        }
                                });
    

    附加信息 (在这个查询之后,正在分配另一个查询,以防有连接。因为这个虫子一点意义都没有

    private void setListenerForLastMessage()
                {
    
                  final  DatabaseReference conversationsRef = firebaseInstance.rootRef
                            .child(mContext.getString(R.string.dbname_conversations))
                            .child(ConversationPushID);
    
    
                    getLastMessageQuery = conversationsRef.orderByKey().limitToLast(1);
                    lastMessageListener = new ChildEventListener()
                        {
                            @Override
                            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
                                {
                                    Message message = dataSnapshot.getValue(Message.class);
    
                                    if (getLastMessageFromListener)
                                        {
                                            messageList.add(message);
    
                                        }
                                    getLastMessageFromListener = true;
                                }
                            @Override
                            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
                                {
                                }
                            @Override
                            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot)
                                {
                                }
                            @Override
                            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
                                {
                                }
                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError)
                                {
                                }
                        };
                    getLastMessageQuery.addChildEventListener(lastMessageListener);
                }
    

    Data Structure

    1 回复  |  直到 7 年前
        1
  •  2
  •   DeveloperKurt    7 年前

    启用Firebase脱机功能时会发生此问题。

    FirebaseDatabase.getInstance().setPersistenceEnabled(true);

    保留要查询的数据库引用 已同步

      conversationsRef.keepSynced(true);
    
    推荐文章