Firebase查询limitToLast不能按预期工作

时间:2018-11-08 03:19:51

标签: android firebase firebase-realtime-database

在我的Firebase数据库中,按键下存储了一些值,我正尝试从其最后10个开始按其键检索这些值。 问题是它不是从最后10个位置的键开始,而是从特定的键开始。 该密钥是该代码首次被初始化的密钥,它应该是最后十个中的第一个。但是已添加了新数据,即使重新安装并重新启动应用后,它也会忽略。 如果我将号码更改为其他号码,则可以正常工作,直到我向数据库添加新消息为止。然后,同样的事情发生在那个数字上。

注意:已传递给sessionsRef的ConversationPushID(字符串)是正确的,并且数据结构是正确的,我只是共享它们以确保安全,所以我检查了它。

查询代码:

line.strip()

其他信息 (此查询后立即分配了另一个查询,以防万一有连接时编写该查询。因为此错误在全部

 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)
                                    {

                                    }
                            });

Data Structure

1 个答案:

答案 0 :(得分:1)

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

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

解决,请保持查询的数据库引用已同步,如下所示:

  conversationsRef.keepSynced(true);