获取firebase实时数据库中的随机条目
Posted
技术标签:
【中文标题】获取firebase实时数据库中的随机条目【英文标题】:Get random entries in firebase real-time database 【发布时间】:2019-02-27 08:35:53 【问题描述】:这是我从实时数据库中获取 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 件物品的最佳方法是什么?我知道实时数据库中还没有随机函数。
【问题讨论】:
【参考方案1】:如果您知道brandGame/
-reference 中的元素数量,您可以在 1 和 numberOfElements 之间选择 5 个随机数并检索它们。这将导致对数据库的多次调用。
或者,您可以从brandGame/
-reference 下载所有内容,然后使用纯 Kotlin 随机选择 5 个元素。但是您必须下载参考中的所有内容,这可能很多。
最好的选择是设置一个执行“选择 5 个随机选项”的云功能 - 逻辑服务器端。 https://firebase.google.com/docs/functions/ 但这需要你写一些js :)
正如您所说,没有内置方法可以从引用中获取随机元素。
【讨论】:
尚未决定。我正在考虑继续使用本地 SQLite 数据库和更新它们的后端。我仍然需要检查使用函数是否是一个可行的解决方案。【参考方案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)
【讨论】:
这是一个很好的解决方案。但是,假设我有 2000 个品牌,我只需要 5 个随机品牌,那么这不会是一个更好的解决方案,对吧? 正如我已经说过的,这是一个用户端解决方案,而不是一个服务器端解决方案。如果要在服务器端获取 5 个随机元素,则需要在 Firebase Cloud Functions 中编写一个函数来获取这些元素。 很高兴听到这个消息,不客气!如果您有这种想法,请考虑通过单击左侧投票箭头下方的复选标记来接受它。应将颜色更改为绿色。我会很感激的。谢谢!以上是关于获取firebase实时数据库中的随机条目的主要内容,如果未能解决你的问题,请参考以下文章
如何从父级及其子级的 Firebase 中获取随机数据 [重复]
如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录
无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据
如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?