在我的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);
}