Значение базы данных Firebase постоянно меняется, а не добавляется само - PullRequest
0 голосов
/ 22 января 2019

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

Моя база данных выглядит так:

appnickname {
Strings {
    key : value
    key : value
    key : value

И мой текущий код таков:

reference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot n : dataSnapshot.getChildren()) {
                if (n.getValue().equals(string)) {
                    break;
                }

                reference.child("key").setValue(string);
            }
        }

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

Проблема с моим текущим кодом заключается в том, что он просто изменяет строку, существующую под тем же ключом, вместо добавления новой комбинации ключ / значение.Хорошо, что если это то же значение, то, насколько я вижу, ничего не происходит.Как я могу исправить плохую вещь?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Похоже, что вы используете структуру key: value и каждый раз отправляете новое значение одному и тому же ключу, и поэтому также при вводе if ничего не происходит.

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

appnickname {
  Strings {
    people {
      value
      value
      value

И если у «Strings» не будет больше детей, и вашим ключом на протяжении всего пути будут только люди, чем просто позвонитьлюди и пропустить другого ненужного родителя.

0 голосов
/ 22 января 2019

Предположим, ваша база данных выглядит так:

Люди

    name  : Peter
    age   : 100
    height: 500

Тогда вы можете сделать это:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
reference.orderByChild("name").equalTo("Peter").addListenerForSingleValueEvent(new ValueEventListener() {

  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
          if(dataSnapshot.exists()){
              //do something
          }
          else
          {
              reference.child("familyName").setValue(familyName);
          }
        }
  }

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

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

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