Мое здравое суждение побуждает меня игнорировать этот вопрос, но я обожаю firebase и думаю, что больше людей должны использовать его, поэтому я сделаю это как можно лучше.
Кратчайший ответ, который я могу дать на ваш вопросэто и «да» и «нет».
Для пояснения краткого ответа мне нужно дать гораздо более длинный ответ, который, надеюсь, поможет вам лучше понять направление, в котором вы должны двигаться, чтобы получить эту работу.
СначалаЯ подробно остановлюсь на «да» и «нет» ...
Да: вы можете хранить данные, содержащиеся в Java HashMap, и находить / извлекать их непосредственно из Firebase способом, который концептуально очень похож на способРаботает Java HashMap.
No: Firebase хранит документы JSON, не типизированные объекты и структуры данных, характерные для среды выполнения приложения, такой как HashMap.Для отображения данных, хранящихся в firebase, в хэш-карту Java потребуется некоторая дополнительная логика
Теперь, чтобы получить реальную помощь по вашей проблеме, мы должны начать с изучения данных, которые необходимо хранить / использовать, и вашей текущей организационной парадигмы.
Основываясь на опубликованном вами коде, в сочетании с некоторыми предположениями с моей стороны о том, как вы могли бы реализовать свой код, если бы он работал
user_information.child(user.getUid()).child("Clock_out").push().setValue(clockMap)
user_information.child(user.getUid()).child("Clock_In").push().updateChildren(dataMap)
ваши данные в конечном итоге будут формироватьсячто-то вроде этого, когда рассматривается как JSON:
{
"user_information":
{
"SomeId1":
{
"Clock_out": { "Clock out Time1": "SomeTimestamp",
"Clock out Time2": "SomeTimestamp",
...
"Clock out TimeN": "SomeTimestamp" },
"Clock_In": { "Clock in Time1": "SomeTimestamp",
"Clock in Time2": "SomeTimestamp",
...
"Clock in TimeN": "SomeTimestamp" }
},
...
"SomeIdN":
{
"Clock_out": { "Clock out Time1": "SomeTimestamp",
"Clock out Time2": "SomeTimestamp",
...
"Clock out TimeN": "SomeTimestamp" },
"Clock_In": { "Clock in Time1": "SomeTimestamp",
"Clock in Time2": "SomeTimestamp",
...
"Clock in TimeN": "SomeTimestamp" }
},
}
}
Надеюсь, я не слишком далеко от цели вашей организационной структуры, и, предположив, что нет, я сейчас скажу вам, что считаю, что это не такфантастическая стратегия.Я основываюсь на прошлом опыте, связанном с разработкой программного обеспечения для отслеживания времени самостоятельно.Но я оставлю все как есть и скажу, что вы можете обращаться ко мне за советом по методам организации, только если вы этого хотите.Однако, прежде чем вы сможете получить какие-либо данные из firebase для использования в просмотре списка, вам сначала нужно будет поместить их туда, и предоставленный вами код не сможет этого сделать, но он близок.Итак, во-первых, вам нужно будет заставить этот код работать и публиковать данные в firebase.
Одна из рекомендаций, которую я имею, состоит в том, чтобы после добавления нового элемента в список часов пользователя в списке, было бы либо временносохраните ключ, сгенерированный firebase для этого входа, локально или найдите его позже и используйте его в качестве ключа для соответствующего времени в списке пользователей.
IE
String key = user_information.child(user.getUid()).child("Clock_In").push().getKey();
// key variable now contains an id under which you can store your clock in/out timestamps
user_information.child(user.getUid() + "/Clock_In/" + key).setValue(ServerValue.TIMESTAMP);
И позже, когда запрашивается тайм-аут:
// key variable is the same value you were given by firebase during clock-in, you'll need to recall that value somehow
user_information.child(user.getUid() + "/Clock_out/" + key).setValue(ServerValue.TIMESTAMP);
Причина, по которой я рекомендую этот подход, заключается в том, что даже если объекты Clock_out и Clock_in ведут себя как списки, при работе с ними через firebase онина самом деле нет.Они хранятся в виде стандартных ключей / значений, содержащих объекты, и получение бесплатных пар тактов / выходов было бы гораздо более эффективным, если бы каждая пара была проиндексирована с использованием одного и того же ключа.
После того, как у вас есть некоторые данные в базе данных Firebase и вы готовы извлечь их для просмотра списка, вы можете восстановить их, используя некоторые из предоставленных фильтров, например
limitToLast()
Полный пример:
Query results = user_information.child(user.getUid() + "/Clock_In").limitToLast(10);
results.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Clear your list view, it's about to be repopulated
for (DataSnapshot clockIn: dataSnapshot.getChildren()) {
String clockOut = user_information.child(user.getUid() + "/Clock_out/" + clockIn.getKey()).getValue();
// Add clockIn.getValue() and clockOut to your listview here
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// ...
}
});