gpt4 book ai didi

java - 机器人:得到 child 的 child

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:02 24 4
gpt4 key购买 nike

我正在尝试获取当前在我的“历史”节点中的行程“状态”,但首先我必须获取“rideKey”。

全局变量:String rideKey,String key。

历史节点:

{
"History" : {
"-LGXaukR30LTjrL3ZNpt" : {
"driver" : "ptnVOKounjXE9VrmZCCvKoZWluf1",
"rating" : 0,
"ridePrice" : 5.25,
"rider" : "C0RjB5NPZcTvWz9XiUAhpTDOK0C2",
"status" : "accepted",
"timestamp" : 1530662726
}
}
}

为了获得 rideKey,我这样做了:

    DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");
keyRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
rideKey = String.valueOf(mDatabase.child("History").push().getKey());
Log.d(TAG, "getKey: key = " + rideKey);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});

这给了我历史中的所有键,我怎样才能得到最新的?

现在,我,还需要获取请求的“状态”。

但是,当我尝试获取状态时,它一直为空。
我尝试将另一个 ValueEventListener 放入 rideKey 值事件中,但仍然为 null

关于我做错了什么有什么想法吗?非常感谢。

编辑

Log.e(TAG, "I made it to getKeyAndStatus");

DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");
keyRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
**// Log.e(TAG, "I made it to getKeyAndStatus: onDataChange");**

Iterable<DataSnapshot> children = dataSnapshot.child("History").getChildren();

for (DataSnapshot child : children){
Log.d(TAG, "getKey: key = " + child.getKey());

Ride ride = child.getValue(Ride.class);
Log.e(TAG, "ride = " + ride);

Log.d(TAG, "Driver = " + ride.getDriver());
Log.d(TAG, "Rating = " + ride.getRating());
Log.d(TAG, "Rider = " + ride.getRider());
Log.d(TAG, "Price = " + ride.getRidePrice());
Log.d(TAG, "status = " + ride.getStatus());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

上面的代码只到日志“I made it to getKeyAndStatus: onDataChange”

编辑 - 结果

results

最佳答案

要解决这个问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference historyRef = rootRef.child("History");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Ride ride = ds.getValue(Ride.class);

Log.d(TAG, "Driver = " + ride.getDriver());
Log.d(TAG, "Rating = " + ride.getRating());
Log.d(TAG, "Rider = " + ride.getRider());
Log.d(TAG, "Price = " + ride.getRidePrice());
Log.d(TAG, "status = " + ride.getStatus());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
historyRef.addListenerForSingleValueEvent(valueEventListener);

logcat 中的输出将是您的属性值。

请注意,使用以下代码行时:

rideKey = String.valueOf(mDatabase.child("History").push().getKey());

您正在生成另一个 key ,而不是获取现有 key 。仅在添加对象时使用 push() 方法,而不是在读取对象时使用。

关于java - 机器人:得到 child 的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51164335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com