这是我的代码,用于从实时数据库中获取5个项目:
val database = FirebaseDatabase.getInstance()
val brandReference = database.getReference("brandGame").limitToFirst(5)
brandReference.addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
dataSnapshot.children.forEach {
...
}
}
}
这是我的实时数据库的样子:
随机获得5件物品的最佳方法是什么?我知道实时数据库中还没有随机函数。
答案 0 :(得分:2)
如果知道brandGame/
引用中的元素数,则可以选择1和numberOfElements之间的5个随机数并检索它们。这将导致对数据库的多次调用。
或者,您可以从brandGame/
引用下载所有内容,并使用纯Kotlin随机选择5个元素。但是然后您必须下载参考中的所有内容,这可能会很多。
最好的选择是设置一个执行“选择5个随机选项”-逻辑服务器端的云功能。 https://firebase.google.com/docs/functions/但这要求您编写一些js :)
正如您所说,没有内置的方法可以从引用中获取随机元素。
答案 1 :(得分:1)
要获得随机品牌,请使用以下代码用户端:
val rootRef = FirebaseDatabase.getInstance().reference
val brandGameRef = rootRef.child("brandGame")
val valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val brandCountList = ArrayList<String>()
for (ds in dataSnapshot.children) {
val brand = ds.child("brand").getValue(String::class.java)
brandCountList.add(brand!!)
}
val brandCount = brandCountList.size
val randomNumber = Random().nextInt(brandCount)
val randomBrand = ArrayList<String>()
randomBrand.add(brandCountList.get(randomNumber)) //Add the brand product to list
val arrayAdapter = ArrayAdapter(applicationContext, android.R.layout.simple_list_item_1, randomBrand)
list_view.adapter = arrayAdapter
}
override fun onCancelled(databaseError: DatabaseError) {
//Handle exceptions
}
}
brandGameRef.addListenerForSingleValueEvent(valueEventListener)