То, что я пытаюсь сделать, это просмотреть базу данных 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, как получить дочерние ключи и значения?
Также проблема, с которой я столкнулся, заключается в том, что моя база данных бесконечно заполнялась снова и снова.
@DougStevenson Я сделал это. Надеюсь, это поможет.




Ваш код эффективно слушает изменения, которые он также вносит. Каждый вызов setValue будет вызывать еще один обратный вызов объекта, который вы передали addValueEventListener. Если вы хотите выполнить итерацию каждого дочернего элемента только один раз и не прослушивать обновления, используйте addListenerForSingleValueEvent вместо addValueEventListener.
Если я использую тот же код, что и выше, но вместо .addValueEventListener я использую .addListenerForSingleValueEvent, он будет работать так, как должен? Я спрашиваю только потому, что в прошлый раз я не мог удержаться от переполнения моей базы данных Firebase, поэтому мне пришлось создать новую. Не хочу, чтобы то же самое повторилось.
Да, и вы всегда можете медленно запустить его в отладчике, чтобы посмотреть, как он работает так, как вам удается.
Чего я не получаю, так это этой ошибки: оператор '==' не может быть применен к 'com.google.firebase.database.DataSnapshot', 'java.lang.String', и это происходит в if (n == inputedString ) { линия. Что я должен делать?
Это потому, что вы должны сравнивать строки в java с методом equals(), а не ==.
Я исправил эту ошибку, просто глупую, недумающую. Я поставил ваш слушатель вместо моего. Теперь он работает таким образом, что делает это только один раз, но проблема теперь в том, что если нет того же значения, то оно просто заменяет предыдущее, а не добавляет.
Это звучит как другая проблема. Пожалуйста, напишите другой вопрос. Мы не можем бесконечно возвращаться к разным проблемам ради одного вопроса.
Пожалуйста, отредактируйте вопрос, чтобы показать, что код, который вы пробовали, работает не так, как вы ожидаете.