#kotlin #firebase-realtime-database
#kotlin #firebase-база данных в реальном времени
Вопрос:
Если я запрашиваю дочернюю базу Readings
данных, у меня есть все элементы, но если я добавляю условие, у меня нет результатов.
Кто-нибудь может помочь мне выполнить запрос, чтобы получить все элементы, имеющие значение "2020-9-23"
(это будет выбрано пользователем)?
Спасибо
mDatabase!!.child("Readings").child("dia").equalTo("2020-9-23").orderByValue().addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val data: ArrayList<EnergyReading> = ArrayList()
if (dataSnapshot != null) {
for (snapshot: DataSnapshot in dataSnapshot.children) {
try {
data.add(EnergyReading(snapshot.child("reading")))
} catch (e: Exception) {
e.printStackTrace()
}
}
mReadingList = data
Log.i("ReadingModel","data updated there are " mReadingList!!.size " Reading in the list")
} else {
throw Exception("data snapshot is null line 31")
}
}
Ответ №1:
Поскольку dia
свойство находится под reading
управлением, вам необходимо заказать reading/dia
:
mDatabase!!.child("Readings").orderByChild("reading/dia").equalTo("2020-9-23").addListenerForSingleValueEvent(object : ValueEventListener {
Комментарии:
1. Это решение не работает для меня. Возвращает «DataSnapshot{key = dia, value = null }»
2. Извините за это, вам действительно нужно
orderByChild()
. Запросы в Firebase состоят как минимум из двух этапов: 1) упорядочивание по некоторому значению, существующему в фиксированном местоположении под каждым дочерним узлом сorderBy...
помощью , 2) затем фильтрация и ограничение дочерних узлов сequalTo
помощью ,startAt
и / илиendAt
.3. Это верно. Мне пришлось удалить последнее значение orderByValue, потому что оно выдавало ошибку. Но теперь это работает. Большое вам спасибо @Frank van Puffelen.