База данных Firebase перезаписывает предыдущее значение с помощью setValue () - PullRequest
0 голосов
/ 20 мая 2018

Итак, у меня есть база данных в Firebase.

Этот код находится в onCreate ():

DatabaseReference mDatabaseRefUser =FirebaseDatabase.getInstance().getReference("Users");

Этот код находится в другом методе, который вызывается onClick:

mDatabaseRefUser.child("Chat").child(mAuth.getCurrentUser().getUid())
            .child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
            mAuth.getCurrentUser().getEmail()));

mDatabaseRefUser.child("Chat").child(userID)
            .child(mAuth.getCurrentUser().getUid()).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
            userEmail));

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

На данный момент каждый раз, когда я нажимаю и запускаю метод, предыдущее / существующее значениеудаляется, а новый добавляется.Но я не хочу ни того, ни другого.Я хочу, чтобы это новое значение было добавлено.Я попытался с getRef и push (), но мои данные все еще перезаписываются.Что я здесь не так делаю?

Это мой первый JSON, когда я вызываю метод:

"Users" : {
"Chat" : {
  "Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
    "xfqAFlRpbUZRlZb76svN5FUtbU93" : {
      "-LCvIA_9L1Y9rjkm96Aj" : {
        "Messages" : {
      "-LCvqDidnNqQ8ALZhDud" : {
        "messageText" : "Very good",
        "messageTime" : 1526791230552,
        "messageUser" : "mama@mama.com"
      }
    },
    "chatAgainstUserEmail" : "mama2@mama.com",
    "chatAgainstUserID" : "xfqAFlRpbUZRlZb76svN5FUtbU93",
    "uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
    "userEmail" : "mama@mama.com",
    "userID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2"
  }
}

},
  "xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
  "-LCvIA_9L1Y9rjkm96Aj" : {
    "Messages" : {
      "-LCvqDigI8ZwHDYuPhw9" : {
        "messageText" : "Very good",
        "messageTime" : 1526791230555,
        "messageUser" : "mama2@mama.com"
      }
    },
    "chatAgainstUserEmail" : "mama@mama.com",
    "chatAgainstUserID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2",
    "uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
    "userEmail" : "mama2@mama.com",
    "userID" : "xfqAFlRpbUZRlZb76svN5FUtbU93"
      }
    }
  }
}

Это мой JSON, когда я вызываю его во второй раз

"Users" : {
"Chat" : {
  "Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
    "xfqAFlRpbUZRlZb76svN5FUtbU93" : {
      "-LCvIA_9L1Y9rjkm96Aj" : {
        "Messages" : {
      "-LCvr0zoHOPxsKOVJzeu" : {
        "messageText" : "Very good 2nd call",
        "messageTime" : 1526791440547,
        "messageUser" : "mama@mama.com"
      }
        },
    "chatAgainstUserEmail" : "mama2@mama.com",
    "chatAgainstUserID" : "xfqAFlRpbUZRlZb76svN5FUtbU93",
    "uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
    "userEmail" : "mama@mama.com",
    "userID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2"
  }
}
  },
  "xfqAFlRpbUZRlZb76svN5FUtbU93" : {
"Xta3jwm4yLQWaJBypMBFt2esiOr2" : {
  "-LCvIA_9L1Y9rjkm96Aj" : {
    "Messages" : {
      "-LCvr0zrh8wQ2WurUezs" : {
        "messageText" : "Very good 2nd call",
        "messageTime" : 1526791440550,
        "messageUser" : "mama2@mama.com"
      }
    },
    "chatAgainstUserEmail" : "mama@mama.com",
    "chatAgainstUserID" : "Xta3jwm4yLQWaJBypMBFt2esiOr2",
    "uploadID" : "-LCvIA_9L1Y9rjkm96Aj",
    "userEmail" : "mama2@mama.com",
    "userID" : "xfqAFlRpbUZRlZb76svN5FUtbU93"
      }
    }
  }
}

Я тоже пробовал с getRef().push(), но это тоже не сработало.Я тоже пробовал без. getRef() и без .push(), тоже не сработало.

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Для обновления данных вы должны использовать код такого типа вместо использования child.setValue(), так как его название предполагает прямую замену старых значений новыми.Но если вы хотите изменить определенное значение, то вам следует перейти к чему-то, как показано ниже.Попробуйте, приятель!

HashMap<String, Object> params = new HashMap<>();
params.put("yourKey", your value);   
yourDatabaseChildReference.updateChildren(params);
0 голосов
/ 21 мая 2018

Моим единственным решением этой проблемы было создание новой базы данных,

Я добавил это:

mDatabaseRefUser.child("Chatting").child(mAuth.getCurrentUser().getUid())
                .child(userID).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
                mAuth.getCurrentUser().getEmail()));

        mDatabaseRefUser.child("Chatting").child(userID)
                .child(mAuth.getCurrentUser().getUid()).child(uploadID).child("Messages").push().setValue(new ChatMessage(addMessageEditText.getText().toString(),
                userEmail));

и удалил старую

0 голосов
/ 21 мая 2018

Чтобы обновить значение вместо его переопределения, вы должны использовать метод updateChildren () .

Вы переопределяете его, потому что каждый узел в базе данных Firebase имеет значение Map и вв случае Map оно заменяет старое значение новым.

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