Насколько я вижу, у вас есть структура данных:
Messages: {
uid1: {
uid2: {
messageId1: ...
messageId2: ...
messageId3: ...
}
}
}
Вы присоединяете ChildEventListener
к /Messages/uid1
, что означает, что ваш onChildAdded
будет вызван для UID второго уровня пользователя из вашего JSON. Чтобы перейти к отдельным сообщениям, вам все равно нужно перебрать дочерние узлы DataSnapshot
:
FirebaseDatabase.getInstance()
.getReference()
.child("Messages")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable, String s) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
Log.d("message key: ", messageSnapshot.getKey());
Log.d("message time: ", messageSnapshot.child("time").getValue(String.class));
}
}
Несколько замечаний:
- Как уже говорилось, этот код зацикливается на дочерних элементах
DataSnapshot
, чтобы добраться до отдельных сообщений.
- Рассмотрите возможность хранения данных в виде чатов, в которых ключ каждой комнаты чата основан на UID ее участников, как описано здесь: Лучший способ управления каналами чата в Firebase
- Вам нужно будет добавить свои сообщения в список и отсортировать их на стороне клиента.
- Вы сохраняете время в виде отображаемой строки, что затрудняет их сортировку. Рекомендуется хранить их в формате, который легче сортировать, например,
"20190513T073306"
или отметку времени, например 1557758003677
.