【发布时间】:2020-09-18 19:06:48
【问题描述】:
我有一个看起来像这样的实时 Firebase 数据库。
图像中显示了许多元素,其中 3 与这 3 个元素处于同一级别。
我想要做的是根据参数 OrderCount 在 Kotlin 中获取它们。
因此,当我获取时,我希望 Dragon Fruit 成为 1st,Cherimoya 成为 2nd,Ackee 成为 3rd 以此类推。
基于 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 的参数,此结果也不会改变。
这是获取结果的code。
我还想要的是在订购后只获得前 5 个结果。
是否会使用 limitToFirst(5) 属性来实现此目的或是否有其他方法。
当我从 python 尝试时,相同的代码给了我完美的结果:
代码是:
ref = db.reference('all_items/Exotic_Fruits').order_by_child("OrderCount").limit_to_first(5)
refData = ref.get()
【问题讨论】:
-
您的问题中中的代码有什么问题?例如:
Log语句中的哪一个打印出与您预期不同的内容? -
打印数据快照的日志语句。 ie."Log.d("LoadingActivity", "${p0}")".
-
打印什么?你期待什么?
-
它返回给我一个错误订单的数据快照。但是,当我通过 for 循环迭代数据快照时,它给了我正确的顺序。例如,我得到以元素“Kiwano”开头的元素,但是当我遍历数据快照时,它打印的第一个元素是我所期望的火龙果。
标签: android firebase kotlin firebase-realtime-database