У меня есть база данных firebase в реальном времени, которая выглядит так.
На изображении на том же уровне, что и эти 3, показано много элементов, включая 3.
Я хочу получить их в Kotlin на основе параметра OrderCount .
Поэтому, когда я беру, я хочу, чтобы Драконий фрукт был 1-м , Черимойя был 2-м , Аки < / strong> на 3-е место и так далее.
Это то, что я пробовал на основе Stackoverflow и других ресурсов.
val refFeatured1 = FirebaseDatabase.getInstance().getReference("/all_items/Exotic_Fruits")
.orderByChild("OrderCount")
refFeatured1.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
Log.d("LoadingActivity", "Error in Fetching all items data : ${p0}")
return
}
override fun onDataChange(p0: DataSnapshot) {
Log.d("LoadingActivity", "${p0}")
}
})
Результат следующего запроса дает мне другие элементы.
Этот результат не изменится, даже если я изменю параметр orderByChild .
Это код для получения результата. Я также хочу получить только первые 5 результатов после заказа.
Будет ли для этого использоваться атрибут limitToFirst (5) или есть другой способ.
Тот же код, когда я пробовал использовать python, дает отличный результат: Код такой:
ref = db.reference('all_items/Exotic_Fruits').order_by_child("OrderCount").limit_to_first(5)
refData = ref.get()
1 ответ
Когда вы запрашиваете упорядоченные данные из Firebase, вы получаете DataSnapshot
с результатами. Для каждого совпадающего узла, который содержит:
- Ценность узла
- Ключ узла
- Положение узла относительно других результатов.
Когда вы запрашиваете значение узла в целом (путем вызова value
или, как вы это делаете, путем его печати), результаты преобразуются в объект Map
. На карте нет порядка между ключами, поэтому информация о порядке теряется.
Чтобы сохранить информацию о порядке результатов, вам нужно перебрать список DataSnapshot.children
.
val refFeatured1 = FirebaseDatabase.getInstance().getReference("/all_items/Exotic_Fruits")
.orderByChild("OrderCount")
refFeatured1.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
Log.d("LoadingActivity", "Error in Fetching all items data : ${p0}")
return
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (snapshot in dataSnapshot.children) {
Log.d("LoadingActivity", "${snapshot}")
}
}
})
Также см. Документацию Firebase для списков чтения с прослушивателем значений., откуда у меня петля.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.