获取火力实时数据库中随机(Get random entries in firebase real-t

2019-10-29 05:31发布

这是我的代码从实时数据库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项随机的最佳方式? 我知道有没有实时数据库随机函数呢。

Answer 1:

如果你知道在元素的数量brandGame/引用,你可以挑选5个随机数字1和numberOfElements之间和检索这些。 这将导致多次调用数据库。

或者,您可以从下载的一切brandGame/引用,并只挑选使用纯科特林5个随机元素。 但你必须在参考下载的一切,这可能是很多。

最好的办法是建立一个云功能,做了“接5个随机选择”编辑逻辑服务器端。 https://firebase.google.com/docs/functions/但这需要你写的一些JS :)

正如你所说,没有内置的方式来获得一个参考随机元素。



Answer 2:

为了获得一个随机的品牌,请使用以下代码用户侧:

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)


文章来源: Get random entries in firebase real-time database