无法从Android应用程序更新Firebase数据库中的值

无法从Android应用程序更新Firebase数据库中的值,android,firebase-realtime-database,Android,Firebase Realtime Database,使用下面的代码,我有了“历史节点” 历史节点 { “历史”:{ “-LJANnl9ofbXlxLGxTGg”:{ “目的地”:“3天堂行”, “驱动程序”:“regqrl2iuhmliqdbqbielhbsge3”, “地点”:“联合街1号”, “付款响应”:“已批准”, “评级”:0, “ridePrice”:5.25, “附加条款”:“L3PPYBQUX7YJHGTTEXWDBTELM2”, “riderPaid”:“正确”, “状态”:“已接受”, “时间戳”:1533494377 } }

使用下面的代码,我有了“历史节点”

历史节点

{
“历史”:{
“-LJANnl9ofbXlxLGxTGg”:{
“目的地”:“3天堂行”,
“驱动程序”:“regqrl2iuhmliqdbqbielhbsge3”,
“地点”:“联合街1号”,
“付款响应”:“已批准”,
“评级”:0,
“ridePrice”:5.25,
“附加条款”:“L3PPYBQUX7YJHGTTEXWDBTELM2”,
“riderPaid”:“正确”,
“状态”:“已接受”,
“时间戳”:1533494377
}
}
使用以下代码,我尝试更新“status”值,将其从“accepted”更新为“arrized_loc”。运行代码时,我在firebase中有一个黄色突出显示,但保留status值“accepted”

将状态更新为“到达位置”

我得到一个额外的历史节点,没有更新:

“历史记录”:{
“-Ljaven2iawfrredlbevb”:{
“目的地”:“联合街3号”,
“驱动程序”:“regqrl2iuhmliqdbqbielhbsge3”,
“位置”:“主街123号”,
“付款响应”:“已批准”,
“评级”:0,
“ridePrice”:5.38,
“附加条款”:“L3PPYBQUX7YJHGTTEXWDBTELM2”,
“riderPaid”:“正确”,
“状态”:“已接受”,
“时间戳”:1533496391
},
“-LJAVaFd3Gzq3iIZGHeP”:{
“付款响应”:“已批准”,
“riderPaid”:“正确”,
“状态”:“已接受”
}
}
编辑#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) {

                }
            });
        }

尝试使用
updateChildren()

driverId=FirebaseAuth.getInstance().getCurrentUser().getUid();
HashMap newData=新HashMap();
newData.put(“状态”、“到达位置”);
final DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference().child(“History/”+driverId);//或者路径是什么
rootRef.updateChildren(newData);

@Mohsen我试过了,它删除了我的整个数据库,只设置了status的值。第一件事是停止忽略潜在的错误:
public void onCancelled(DatabaseError DatabaseError){throw DatabaseError.toException();}
@LizG请不要将代码粘贴为注释。另外,您确定要首先获取值吗?您没有调试以检查它吗?您共享的代码在
query.addListenerForSingleValueEvent(新的ValueEventListener()中有一个侦听器{
,并且该侦听器正在忽略对取消的
的调用。这意味着,如果存在任何错误,您将看不到它。您是否碰巧使用了云函数?注释不用于扩展讨论;此对话已被取消。
DatabaseReference arrivedLoc = FirebaseDatabase.getInstance().getReference("History");
    String historyId = arrivedLoc.getKey();
    arrivedLoc.child(historyId).child("status").setValue("arrived at pickup");
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) {

                }
            });
        }
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);