Согласно предыдущим комментариям, вы подтвердили, что хотите, чтобы кто-то нажимал на дату в календаре, чтобы запросить узел targets
, используя эту дату, чтобы найти один или несколько результатов.Но обо всем по порядку.
Для целей поиска сохранение date
в виде строки может работать, поскольку вы можете использовать для сравнения whereEqualTo()
метод, но если вы хотите упорядочить результаты, он не будет работатьпоскольку строки упорядочены лексикографически .Так что вы можете рассмотреть вопрос о сохранении date
как ServerValue.TIMESTAMP
, как объяснено в моем ответе из следующего поста:
Кроме того, я предоставлю вам решение для вашего конкретного использования, где date
- это строка, но я могу просто изменить ее позже, если вы решите использоватьРешение выше.Поэтому в качестве выбранной даты я буду использовать следующую строку:
val selectedDate = "24 October 2019"
Предполагая, что это значение исходит из выбора даты в вашем календаре, попробуйте следующий код:
val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().reference
val targetsRef = rootRef.child("targets").child("users").child(uid).child("targets")
val query = targetsRef.orderByChild("date").equalTo(selectedDate)
val valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (ds in dataSnapshot.children) {
val name = ds.child("name").getValue(String::class.java)
Log.d(TAG, name)
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
}
}
query.addListenerForSingleValueEvent(valueEventListener)
В этом случае результат в вашем logcat будет:
target
Редактировать:
Я получаю имена всех созданных целей независимо от того,выбранной даты в календаре.
Вы получаете все даты, потому что вы забыли позвонить .equalTo(selectedDate)
.Поэтому, пожалуйста, измените:
val query = targetsRef.orderByChild("date")
на
val query = targetsRef.orderByChild("date").equalTo(selectedDate)