Обновление Firebase делает новый с тем же идентификатором, кроме последнего символа

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

Я использовал это как сайт Firebase, но он не работает. Я создал новый, и в следующий раз его обновление:

Map<String, Object> childUpdate = new HashMap<>(); childUpdate.put("/masjeds/" + masjed.getId(), masjed.toMap()); reference.updateChildren(childUpdate); 

И этот код сделал то же самое

  final FirebaseDatabase database = FirebaseDatabase.getInstance(); masjeds = database.getReference("masjeds"); reference.child(masjed.getId()).setValue(masjed, new DatabaseReference.CompletionListener() { @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { // Toast.makeText(MyMasjedsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show(); } }); 

Масский класс – простой Java-объект

 public class Masjed { private String userID; private String id; private String name; private String address; private String phone; private boolean matloopEmam; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public boolean isMatloopEmam() { return matloopEmam; } public void setMatloopEmam(boolean matloopEmam) { this.matloopEmam = matloopEmam; } public Masjed(String name, String address, String phone) { this.name = name; this.address = address; this.phone = phone; } public Masjed() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Map<String, Object> toMap() { Map<String, Object> map = new HashMap<>(); map.put("name", name); map.put("address", address); map.put("phone", phone); map.put("id", id); map.put("userID", userID); return map; } } 

Введите описание изображения здесь

Id – это проблема, которую я предполагал, что push.getkey и поместил ее как идентификатор, а затем использовать push.setValue (masjed) будет использовать тот же ключ, что оказывается, что не всегда происходит изменение ключа, когда я использую его dosnt exist И поэтому он создает новый ответ, который помог мне – это Честер ответ

Я надеюсь, что это поможет, использовал его в моем проекте для домашних животных (это не решение для очистки, но оно работает):

 masjeds = database.getReference("masjeds"); ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { masjedKey = dataSnapshot1.getKey(); // This is a member variable masjed = dataSnapshot1.getValue(Masjed.class); // This is a member variable } } @Override public void onCancelled(DatabaseError databaseError) { } }; masjeds.orderByChild("id").equalTo(masjed.getId()).addValueEventListener(listener); //Use your Map to update each value this is just an example masjeds.child(masjedKey).child("name").setValue("John"); //you can add event listener if you want to see if it's completed, but it works without the events 
  final FirebaseDatabase database = FirebaseDatabase.getInstance(); masjeds = database.getReference("masjeds"); // ** what is reference here? This must be masjeds ** reference.child(masjed.getId()).setValue(masjed, new DatabaseReference.CompletionListener() { @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { // Toast.makeText(MyMasjedsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show(); } }); 

Я добавил свои выводы как комментарий выше, который я нашел в качестве подозреваемого, возможно, вы указываете на неправильную ссылку. Вы нацеливаетесь на reference узел, в то время masjeds узел masjeds не используется. Пожалуйста, проверьте его и для лучшего понимания поставьте базу данных firebase.

Вы можете попробовать что-то вроде этого, чтобы обновить дочерние узлы определенного узла с содержимым вашего HashMap:

 // get a reference to the node that you want to update DatabaseReference masjedToUpdate = masjeds.child(masjed.getId()); // pass your hashmap to its "updateChildren" method masjedToUpdate.updateChildren(masjed.toMap()); 

Обратите внимание, что этот подход по-прежнему немного нестандартен по нескольким причинам. Но он должен выполнить эту работу за вас.

Обновление FireBase с помощью

 mDatabase.child("masjed").child("the_key_of_child_you_want_to_update").setValue(masjedObject); 

Будет работать нормально, он не создаст нового ребенка

Вы можете проверить My demo здесь