Итерация по базе данных Firebase

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

Моя коллекция Firebase выглядит так:

appname{
Collection{
    key : value
    key : value
    key : value

Итак, еще раз, я хочу посмотреть, равно ли введенное значение какому-либо значению из коллекции. Если это не так, введенное значение должно быть добавлено в коллекцию.

Обновлено: мне сказали показать код, который я использовал, который не работал. Я удалил код, так как пробовал разные вещи. Но я постараюсь вспомнить, как это было. Здесь:

reference.child("strings").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot n : dataSnapshot.getChildren()){
        if (n == inputedString) {
            break;
        }
    ref.child("strings").setValue(inputedString);
    }
}

Опять же, я не уверен, что это точный код, но он похож на него. Я использовал этот ответ как помощь, но не смог настроить его под свои нужды: Firebase/android, как получить дочерние ключи и значения?

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

Пожалуйста, отредактируйте вопрос, чтобы показать, что код, который вы пробовали, работает не так, как вы ожидаете.

Doug Stevenson 22.01.2019 06:43

@DougStevenson Я сделал это. Надеюсь, это поможет.

pantank14 22.01.2019 07:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код эффективно слушает изменения, которые он также вносит. Каждый вызов setValue будет вызывать еще один обратный вызов объекта, который вы передали addValueEventListener. Если вы хотите выполнить итерацию каждого дочернего элемента только один раз и не прослушивать обновления, используйте addListenerForSingleValueEvent вместо addValueEventListener.

Если я использую тот же код, что и выше, но вместо .addValueEventListener я использую .addListenerForSingleValueEvent, он будет работать так, как должен? Я спрашиваю только потому, что в прошлый раз я не мог удержаться от переполнения моей базы данных Firebase, поэтому мне пришлось создать новую. Не хочу, чтобы то же самое повторилось.

pantank14 22.01.2019 07:19

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

Doug Stevenson 22.01.2019 07:21

Чего я не получаю, так это этой ошибки: оператор '==' не может быть применен к 'com.google.firebase.database.DataSnapshot', 'java.lang.String', и это происходит в if (n == inputedString ) { линия. Что я должен делать?

pantank14 22.01.2019 07:28

Это потому, что вы должны сравнивать строки в java с методом equals(), а не ==.

Doug Stevenson 22.01.2019 07:37

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

pantank14 22.01.2019 07:37

Это звучит как другая проблема. Пожалуйста, напишите другой вопрос. Мы не можем бесконечно возвращаться к разным проблемам ради одного вопроса.

Doug Stevenson 22.01.2019 07:38

Другие вопросы по теме