Actualización de Firebase está haciendo nueva con el mismo id excepto el último carácter

Estoy utilizando este código para actualizar los datos en Firebase, pero hace uno nuevo. He intentado un montón de código y la dosis de la misma haciendo una nueva con la misma clave, excepto carácter pasado.

He utilizado esto como el sitio Firebase recomendado, pero no funciona. He creado un nuevo y la próxima vez que su actualización:

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

Y este código hecho lo mismo

  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(); } }); 

La clase Masjed es un objeto java simple

 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; } } 

Introduzca aquí la descripción de la imagen

El id es el problema que estaba asumiendo que push.getkey y ponerlo como ID a continuación, utilizar push.setValue (masjed) va a utilizar la misma clave que resultan que no es siempre el caso de la clave cambia cuando estoy usarlo dosnt existen Y así crear un nuevo la respuesta que me ayudó es Chester Respuesta

Espero que esto ayude, lo usé en mi proyecto de mascota (no es la solución de limpieza pero funciona):

 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(); } }); 

He añadido mis conclusiones como un comentario por encima de lo que encontré como un sospechoso, que podría estar apuntando a la referencia equivocada. Se está orientando al nodo de reference mientras que el nodo de masjeds no está utilizado. Por favor verifíquelo y para una mejor comprensión put Base de datos de firebase.

Usted podría intentar algo como esto, para actualizar a los niños de un nodo específico con el contenido de su 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()); 

Tenga en cuenta que este enfoque es todavía un poco no estándar, por un par de razones. Pero debe hacer el trabajo para usted.

Actualizar FireBase por uso

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

Trabajará normalmente, no creará nuevo niño

Puedes comprobar Mi demo aquí

  • Firebase agrega un nuevo hijo con el nombre especificado
  • Firebase agrega oyentes en adaptadores en Android
  • La aplicación de Android no recibe notificación de Firebase cuando la aplicación se detiene desde la bandeja de tareas múltiples
  • Firebase - Elimina un grupo de dispositivos sin conocer los ID de registro de sus miembros
  • ¿Puedo inicializar Firebase sin usar google-services.json?
  • Cómo Firebase Auth con Rails?
  • Firebase Storage - StorageReference.getFile () se bloquea cuando el dispositivo está desconectado
  • No se puede obtener URI de referencia de almacenamiento en Firebase
  • FirebaseRecyclerAdapter no funciona con enlaces de datos
  • FirebaseRecyclerAdapter con vista vacía
  • ¿Qué es firebase y cómo usarlo en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.