Actualizar claves específicas con Firebase para Android

Tengo una base de datos Firebase creado de la siguiente manera

tasks -K1NRz9l5PU_0R8ltgXz Description: "test1" Status: "PENDING" -K1NRz9l5PU_0CFDtgXz Description: "test2" Status: "PENDING" 

Necesito actualizar el estado del segundo objeto de PENDIENTE a COMPLETADO. Estoy utilizando el método updateChildren pero se agrega un nuevo nodo a las tareas child.

¿Cómo puedo actualizar el estado del segundo nodo sin crear un nuevo nodo?

Aquí está mi código a partir de ahora,

// en un oyente de clic de botón

  { Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL); final Firebase objRef = m_objFireBaseRef.child("tasks"); Map<String,Object> taskMap = new HashMap<String,Object>(); taskMap.put("Status", "COMPLETED"); objRef.updateChildren(taskMap); //should I use setValue()...? }); 

No especifica el ID de tarea de la tarea que desea actualizar.

 String taskId = "-K1NRz9l5PU_0CFDtgXz"; Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL); Firebase objRef = m_objFireBaseRef.child("tasks"); Firebase taskRef = objRef.child(taskId); Map<String,Object> taskMap = new HashMap<String,Object>(); taskMap.put("Status", "COMPLETED"); taskRef.updateChildren(taskMap); 

Alternativamente, puede llamar a setValue() en la propiedad que desea actualizar

 String taskId = "-K1NRz9l5PU_0CFDtgXz"; Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL); Firebase objRef = m_objFireBaseRef.child("tasks"); Firebase taskRef = objRef.child(taskId); Firebase statusRef = taskRef.child("Status"); statusRef.setValue("COMPLETED"); 

O:

 Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL); Firebase objRef = m_objFireBaseRef.child("tasks"); objRef.child(taskId).child("Status").setValue("COMPLETED"); 

Actualizar

No estoy seguro de lo que "necesito rastrear el ID basado en el estado" significa. Pero si desea sincronizar todas las tareas que están en estado Pending , haría lo siguiente:

 Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL); Firebase objRef = m_objFireBaseRef.child("tasks"); Query pendingTasks = objRef.orderByChild("Status").equalTo("PENDING"); pendingTasks.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot tasksSnapshot) { for (DataSnapshot snapshot: tasksSnapshot.getChildren()) { snapshot.getRef().child("Status").setValue("COMPLETED"); } } @Override public void onCancelled(FirebaseError firebaseError) { System.out.println("The read failed: " + firebaseError.getMessage()); } }); 

Este código encontrará el contenido del nodo test2 , luego actualizará el estado. Espero que esto ayude. Estoy utilizando Google Firebase.

 FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(); final DatabaseReference reference = firebaseDatabase.getReference(); Query query = reference.child("tasks").orderByChild("Description").equalTo("test2"); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { DataSnapshot nodeDataSnapshot = dataSnapshot.getChildren().iterator().next(); String key = nodeDataSnapshot.getKey(); // this key is `K1NRz9l5PU_0CFDtgXz` String path = "/" + dataSnapshot.getKey() + "/" + key; HashMap<String, Object> result = new HashMap<>(); result.put("Status", "COMPLETED"); reference.child(path).updateChildren(result); } @Override public void onCancelled(DatabaseError databaseError) { Logger.error(TAG, ">>> Error:" + "find onCancelled:" + databaseError); } }); 

Ustedes no están ayudando … estamos tratando de saber qué función puede ayudarnos a obtener la clave para que las actualizaciones pueden ser automáticamente sin comparar ningún valor. Estoy en la búsqueda si hay un camino que voy a dejar saber u PERTH

 Log.e(TAG, "Key2 is "+getRef(position).getKey()); 

Por favor usefirebase Ui Parece que el firebase original no tiene todavía.

Puedes usar el código de abajo para actualizar

 HashMap<String, Object> result = new HashMap<>(); result.put("Description", "Your Description comes here"); FirebaseDatabase.getInstance().getReference().child("tasks").child("-K1NRz9l5PU_0R8ltgXz").updateChildren(result); 

Se actualizará un niño específico

  • Error al resolver: com.google.firebase: firebase-core: 9.6.0
  • Java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
  • Firebase Big query - Cómo recuperar los datos de la tabla Eventos personalizados
  • FireBase onDataChange no se llama
  • Firebase obtiene el último id - limitToLast no funciona - android
  • Firebase / Android - Cargar usuario por UID
  • Java.lang.NoSuchMethodError: No hay método virtual zzait () Ljava / util / ArrayList; En la clase Lcom / Error?
  • Etiqueta de comercio electrónico mejorada a través de GTM v5 mediante paquete firebase
  • Firebase + Permisos
  • Firebase y recuperando elementos
  • Cambiar dinámicamente el límite de una referencia de consulta de Firebase en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.