Получить случайные записи в базе данных Firebase в режиме реального времени - PullRequest
0 голосов
/ 23 сентября 2018

Это мой код для получения 5 элементов из базы данных в реальном времени:

val database = FirebaseDatabase.getInstance()
val brandReference = database.getReference("brandGame").limitToFirst(5)
brandReference.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
         dataSnapshot.children.forEach {
            ...
         }
    }
}

А вот так выглядит моя база данных в реальном времени:

And this is how my real-time database looks like

Какой лучший способ получить 5 предметов в случайном порядке?Я знаю, что в базе данных реального времени еще нет случайной функции.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Чтобы получить случайный бренд, используйте следующий код пользователя:

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)
0 голосов
/ 24 сентября 2018

Если вам известно количество элементов в ссылке brandGame/, вы можете выбрать 5 случайных чисел от 1 до numberOfElements и получить их.Это может привести к нескольким вызовам в базу данных.

В качестве альтернативы, вы можете загрузить все из ссылки brandGame/ и просто выбрать 5 случайных элементов, используя чистый Kotlin.Но тогда вы должны скачать все по ссылке, что может быть много.

Наилучший вариант - настроить облачную функцию, которая делает логику «выбора 5 случайных опций» на стороне сервера.https://firebase.google.com/docs/functions/ Но для этого нужно написать несколько js :)

Как вы говорите, не существует встроенного способа получения случайных элементов из ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...