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 utilizar y realizar un seguimiento correcto de las invitaciones a la aplicación?
- Cómo crear un tema en las notificaciones FCM
- FirebaseApp no se inicializa a pesar de que FirebaseApp.initializeApp () se llama en la clase Application
- Firebase API llamada con varios temas en condición
- Eventos personalizados de Firebase
¿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()...? });
- Cómo extraer todo el nombre de usuario del usuario que están en línea desde la base de datos de firebase.
- Error al mostrar datos como ListView de Firebase
- Consulte los datos de ingresos de AdMob en Analytics.
- Enlace analítico de firebase a Google play
- Cómo mantener la escucha de servlets de App Engine en Firebase
- ¿Cómo lidiar con el modo fuera de línea Firebase y el empuje de datos?
- Firebase Cloud Messaging no llama a FirebaseInstanceId
- ¿Es gratuito Firebase Cloud Messaging?
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
- Tabla de necesidades de los códigos clave para android y presentador
- Obtener el directorio de bases de datos de mi aplicación mediante programación