В моей базе данных Firebase есть значения, хранящиеся под кнопками, и я пытаюсь получить эти значения по их ключам, начиная с последних 10 из них .
Проблема в том, что начинается не с клавиши на последней 10-й позиции , а с определенной клавиши . Этот ключ тот, который этот код был впервые инициализирован, и он был первым из последних 10-го, как и должно быть. Но новые данные были добавлены и игнорирует их даже после переустановки, перезапуска приложения.
Если я изменю число на что-то другое, то оно будет работать нормально, пока я не добавлю новое сообщение в базу данных. Затем то же самое происходит с этим номером.
Примечание: ConversationPushID (строка), который был передан в диалоги откликов, правильный и структура данных верна, просто поделился ими для подтверждения, я проверил это.
Код запроса:
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);
}
