使用下面的代码,我得到了"history node“。
历史节点
{
"History" : {
"-LJANnl9ofbXlxLGxTGg" : {
"destination" : "3 Paradise Row",
"driver" : "ReGqRl2IIUhmLIqdBqBIELHBsgE3",
"location" : "1 Union St",
"payment response" : "approved",
"rating" : 0,
"ridePrice" : 5.25,
"rider" : "l3PPyBQux7YJhGGTdexxwDBteLM2",
"riderPaid" : "true",
"status" : "accepted",
"timestamp" : 1533494377
}
}
使用下面的代码,我尝试更新"status“值以从"accepted”更新为"arrived_loc“。当我运行代码时,我在firebase中有一个黄色的高亮显示,但状态值保持为“已接受”。
更新状态为"arrived_loc"
driverId = FirebaseAuth.getInstance().getCurrentUser().getUid();
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRefchild("History").orderByChild("driver").equalTo(driverId);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
DataSnapshot nodeDS = dataSnapshot.getChildren().iterator().next();
String key = nodeDS.getKey();
Log.e(TAG, "key = " + key);
String path = "/" + dataSnapshot.getKey() + "/" + key;
Log.e(TAG, "path = " + path);
HashMap<String, Object> update = new HashMap<>();
update.put("status", "arrived_loc");
rootRef.child(path).updateChildren(update);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我做错了什么?
编辑#1
如果我运行这段代码:
DatabaseReference arrivedLoc = FirebaseDatabase.getInstance().getReference("History");
String historyId = arrivedLoc.push().getKey();
arrivedLoc.child(historyId).child("status").setValue("arrived at pickup");
我得到一个额外的历史节点,但没有更新:
"History" : {
"-LJAVN2iAWfRREdlBevb" : {
"destination" : "3 Union St",
"driver" : "ReGqRl2IIUhmLIqdBqBIELHBsgE3",
"location" : "123 Main Street",
"payment response" : "approved",
"rating" : 0,
"ridePrice" : 5.38,
"rider" : "l3PPyBQux7YJhGGTdexxwDBteLM2",
"riderPaid" : "true",
"status" : "accepted",
"timestamp" : 1533496391
},
"-LJAVaFd3Gzq3iIZGHeP" : {
"payment response" : "approved",
"riderPaid" : "true",
"status" : "accepted"
}
}
编辑#2 -冻结的数据库图像
编辑#3
由于某种原因,我似乎无法让它工作,所以我将"status“重命名为"requestStatus”,并创建了一个名为rideStatus的新变量,如下所示:
status = "arrived at pickup";
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("History");
rootRef.child(requestId).child("rideStatus").setValue(status);
这看起来现在还行得通,但是当我需要更改rideStatus的值时,希望它能行得通。
发布于 2018-08-06 03:22:40
尝试使用不带push()
函数的代码:
DatabaseReference arrivedLoc = FirebaseDatabase.getInstance().getReference("History");
String historyId = arrivedLoc.getKey();
arrivedLoc.child(historyId).child("status").setValue("arrived at pickup");
(取决于你需要在你的应用上实现什么,可能会有一点不同)
更新#2:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("History");
addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
snapshot.getRef().child("status").setValue("arrived at pickup");
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
发布于 2018-08-06 04:03:04
尝试使用updateChildren()
driverId = FirebaseAuth.getInstance().getCurrentUser().getUid();
HashMap<String, String> newData = new HashMap<>();
newData.put("status", "arrived_loc");
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("History/" + driverId); // Or however the path is
rootRef.updateChildren(newData);
https://stackoverflow.com/questions/51697366
复制相似问题