通过以下代码,我得到了“历史节点”。
历史节点
{
"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 的值时,希望它会起作用。
最佳答案
尝试在没有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) {
}
});
}
关于android - 无法从 Android 应用更新 Firebase 数据库中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697366/