使用Firebase for Android更新特定的按键 [英] Update specific keys using Firebase for Android
问题描述
我有一个Firebase数据创建如下
任务
-K1NRz9l5PU_0R8ltgXz
描述:test1
状态:PENDING
-K1NRz9l5PU_0CFDtgXz
描述:test2
状态:PENDING
我需要将第二个对象的状态从PENDING更新为COMPLETED。我正在使用 updateChildren
方法,但是它向子任务添加了一个新节点。
如何更新第二个节点的状态,而不创建一个新的节点?
这是我的代码截至目前,
//在按钮上点击侦听器
{
Firebase m_objFireBaseRef =新的Firebase(AppConstants.FIREBASE_URL) ;
最终Firebase objRef = m_objFireBaseRef.child(tasks);
地图< String,Object> taskMap = new HashMap< String,Object>();
taskMap.put(Status,COMPLETED);
objRef.updateChildren(taskMap); //我应该使用setValue()...?
});
您没有指定任务的任务ID你要更新。
字符串taskId =-K1NRz9l5PU_0CFDtgXz;
Firebase m_objFireBaseRef =新的Firebase(AppConstants.FIREBASE_URL);
Firebase objRef = m_objFireBaseRef.child(tasks);
Firebase taskRef = objRef.child(taskId);
地图< String,Object> taskMap = new HashMap< String,Object>();
taskMap.put(Status,COMPLETED);
taskRef.updateChildren(taskMap);
或者,您可以调用 setValue()
关于你想要更新的财产
字符串taskId =-K1NRz9l5PU_0CFDtgXz;
Firebase m_objFireBaseRef =新的Firebase(AppConstants.FIREBASE_URL);
Firebase objRef = m_objFireBaseRef.child(tasks);
Firebase taskRef = objRef.child(taskId);
Firebase statusRef = taskRef.child(状态);
statusRef.setValue(COMPLETED);
或者:
Firebase m_objFireBaseRef =新的Firebase(AppConstants.FIREBASE_URL);
Firebase objRef = m_objFireBaseRef.child(tasks);
objRef.child(taskId).child(Status)。setValue(COMPLETED);
更新
需要根据状态跟踪ID的意思。但是如果你想同步处于 Pending
状态的所有任务,你可以这样做:
Firebase m_objFireBaseRef =新的Firebase(AppConstants.FIREBASE_URL);
Firebase objRef = m_objFireBaseRef.child(tasks);
Query pendingTasks = objRef.orderByChild(Status)。equalTo(PENDING);
(DataSnapshot snapshot:tasksSnapshot.getChildren())
public void onDataChange(DataSnapshot tasksSnapshot){
$ pendingBasks.addListenerForSingleValueEvent(new ValueEventListener(){
@Override
$ b $ (完成);
}
}
@覆盖
public void onCancelled(FirebaseError firebaseError){
System.out.println(The read failed:+ firebaseError.getMessage());
}
});
I have a Firebase data created as follows
tasks
-K1NRz9l5PU_0R8ltgXz
Description: "test1"
Status: "PENDING"
-K1NRz9l5PU_0CFDtgXz
Description: "test2"
Status: "PENDING"
I need to update the 2nd object's status from PENDING to COMPLETED. I am using the updateChildren
method but it is added a new node to the tasks child.
How do I update the status of the 2nd node without creating a new node?
Here is my code as of now,
//on a button click listener
{
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()...?
});
You're not specifying the task id of the task that you want to update.
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);
Alternatively, you can just call setValue()
on the property you want to update
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");
Or:
Firebase m_objFireBaseRef = new Firebase(AppConstants.FIREBASE_URL);
Firebase objRef = m_objFireBaseRef.child("tasks");
objRef.child(taskId).child("Status").setValue("COMPLETED");
Update
Not sure what "I need to track the ID based on the status" means. But if you want to synchronize all tasks that are in status Pending
, you'd do:
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());
}
});
这篇关于使用Firebase for Android更新特定的按键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!