насколько я понимаю, вы хотите, чтобы изменить поле и вернуть измененные данные.
для например, для этой структуры данных, если вы хотите изменения Username
, создать пользователя модальность с другим именем, User newUser = new User("https://...","newUserName)
. И изменить поле User модальный
public String Profile;
public String newKey;
Затем дать новый модальный к этому UID,
FirebaseDatabase.getInstance().getReference().child("Users").child("ECWHIksxJ0Q5SUIIrev4BjnjmrJ3").setValue(newUser, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
DatabaseReference yourRef = databaseReference.getRef();
}
});
Теперь у вас есть ссылки изменившихся данных. Вы попробовали что-то вроде этого?
Update:
Если вы хотите обновить несколько значений/поле с одним действием, вы должны создать карту и положить каждый путь в нее значения.
В firebase каждая таблица, каждое конкретное поле - это путь. Рассмотрим структуру данных, показанную выше. Если вы хотите изменить Username
поле:
HashMap<String, Object> updateMap = new HashMap<>();
updateMap.put("/Users/ECWHIksxJ0Q5SUIIrev4BjnjmrJ3/Username", "newUserName");
Для другого пользователя:
updateMap.put("/Users/DIFFERENT_USER_KEY/Username", "newUserName2");
для различного стола:
updateMap.put("/YourOtherTable/DifferentPath/DifferentField", true);
Затем получить корневую ссылку на базу данных и обновить все сразу.
FirebaseDatabase.getInstance().getReference().updateChildren(updateMap).addOnCompleteListener(new OnCompleteListener...)
Это очень простой способ обновить много вещей в одном действии, но это вызывает проблемы при написании firebase rules
. Потому что вы получаете свою корневую ссылку и пытаетесь установить для нее значение. Выбор ваш.
Ах да .. Спасибо, это помогло. – Venky
@AtaerCaner Что делать, если я хочу изменить данные для многих пользователей? Как я могу это сделать без жесткого кодирования случайного ключа? –
@ VictorNgure я обновил свой ответ – AtaerCaner