Как отправить несколько запросов в базу данных firebase одновременно в Android без зацикливания

Я пытаюсь запросить базу данных, чтобы проверить несколько несвязанных ключей, чтобы проверить параметр и составить список, который соответствует моим условиям.

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

Теперь я хочу повторить этот список и запросить их, чтобы увидеть, соответствуют ли они моим условиям.

Я пытался загрузить весь узел и проверить клиентскую сторону, но это стало бы очень медленным, если узел разрастется и загрузит много ненужных данных.

Я попытался зациклить свой запрос и отправить несколько запросов внутри по ключам в моем списке. Это сработало, но становится все сложнее, когда я пытаюсь вернуться к началу с другими условиями, если мои первоначальные условия не были выполнены.

for (int i = 0; i < nextUp.size(); i++) {
    Query query = myRef.child(nextUp.get(i).toString());
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            boolean v = false;

            for (DataSnapshot likesSnapshot : dataSnapshot.getChildren()) {
                if (uid.equals(likesSnapshot.getKey())) {
                    v = true;
                } else {
                }

                //b if for second pass with different conditions
                if (b) {
                    if (!v) {
                        complieList(dataSnapshot.getKey(), b);
                    }

                    if (!b) {
                        complieList(dataSnapshot.getKey(), b);
                    }
                }

            }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
}

К тому времени, когда мой код возвращается к началу, все запросы еще не завершены. Поэтому мне нужно дождаться, пока все закончат, чтобы продолжить. Но поскольку это требует ожидания результатов для многих запросов, я не могу просто поместить его в onDataChange. Я видел, что обещание JavaScript может одновременно отправлять несколько запросов в конвейер и получать результат для всех из них. Есть ли способ сделать это в Java.

Обновить

Вот ссылка на то, что я хочу сделать, но для javascript Query По нескольким ключам в Firebase


person Dean    schedule 15.02.2019    source источник
comment
Пожалуйста, добавьте структуру вашей базы данных и предоставьте нам пример ожидаемого результата.   -  person Alex Mamo    schedule 15.02.2019


Ответы (1)


Рассматривали ли вы возможность использования транзакции?

Транзакция используется для составления серверного запроса к базе данных и запроса один раз.

Он также используется для предотвращения изменения данных во время запроса к базе данных.

https://firebase.google.com/docs/reference/android/com/google/firebase/database/Transaction.Handler?hl=ko

кстати, база данных в реальном времени не поддерживает сложные запросы

вы можете использовать только orderbychild.. и т.д.

Но вы можете хранить данные отдельно при сохранении данных.

person MJ Studio    schedule 15.02.2019
comment
Насколько я понимаю, транзакция загрузит весь узел. Это будет гораздо больше данных, чем мне нужно. Я просто хочу читать детей с определенными ключами. - person Dean; 15.02.2019