Я разрабатываю приложение для Android, которое включает в себя загрузку и загрузку изображений на сервер.Я использую Firebase для этой цели.Все изображения хранятся в хранилище Firebase, используя хэш изображения в качестве имени файла.Я также поддерживаю базу данных в реальном времени, которая хранит некоторую информацию о фотографиях.Мне нужно выбрать случайную картинку из хранилища, поэтому я решил выбрать случайную запись из базы данных.Я нашел этот ответ на SO (как вы видите, int написан на Javascript), который предлагает следующий код:
const numberOfUsers = 15;
const randomIndex = Math.floor(Math.random() * numberOfUsers);
var ref = firebase.database().ref('companies/01/users');
ref.limitToFirst(randomIndex).limitToLast(1).once('value').then(snapshot =>
{
var user = snapshot.val();
// do something with the user data
});
, но когда я пытаюсь построить подобный запрос в Java
imgref.limitToFirst(random + 1).limitToLast(1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
randomHash = dataSnapshot.getKey();
Log.e("get random name: ", randomHash);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Я получаю сообщение об ошибке
Can't call limitToLast on query with previously set limit!
Так что, очевидно, я не могу использовать limitToFirst и LimitToLast в одном запросе.Итак, вот мой вопрос:
Можно ли как-то использовать limitToFirst и limitToLast, чтобы использовать этот метод для получения случайной записи?
Есть ли какой-либо другой способ получить случайную запись из базы данных Firebase Realtime без загрузки всей базы данных или итераций по ней (насколько я понимаю, итерация неэффективна, если я ошибаюсь, объясните, пожалуйста)
Если это невозможно сделать из приложения, есть ли другой способ (например, с помощью облачных функций Firebase)