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

4 Solutions collect form web for “Actualización de Firebase está haciendo nueva con el mismo id excepto el último carácter”

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í

  • La aplicación de Android no recibe la notificación de FCM cuando se cierra
  • La verificación de correo electrónico de Firebase no funciona correctamente
  • Android Firebase - almacenamiento de datos sin autenticación
  • ValueEventListener vs ChildEventListener para RecyclerView en Android
  • ¿Cómo enviar un mensaje desde Firebase al dispositivo cuando se mata la aplicación?
  • Aplicación de chat que utiliza Firebase: Recibe notificación cuando recibe un nuevo mensaje - Android
  • No se pueden expandir notificaciones de Firebase
  • Empezó a usar el nuevo sitio web de Firebase y estoy recibiendo este error al probar el programa de ejemplo de autenticación de Android
  • Firebase Remote Config: No se puede leer ningún valor, pero la búsqueda tiene éxito
  • Inactividad, desconectarse de AppMeasurementService
  • Com.firebase.client.FirebaseException: Error al analizar el nodo con la clase CLASS_NAME android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.