我正在尝试获取当前在“历史记录”节点中的游乐设施的“状态”,但首先我必须获取“ rideKey”。
全局变量:字符串rideKey,字符串键。
历史节点:
{
"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值事件中,但仍然为空
关于我在做什么错的任何想法吗? 非常感谢。
编辑
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) {
}
});
上面的代码仅使它到达日志“我将其设置为getKeyAndStatus:onDataChange”
编辑-结果
答案 0 :(得分:2)
要解决此问题,请使用以下代码:
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());
您正在生成另一个密钥,而不是获取现有密钥。仅在添加对象时才使用push()
方法,而在阅读对象时则不使用。
答案 1 :(得分:0)
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);
DatabaseReference statusRef = FirebaseDatabase.getInstance().getReference("History").Child(rideKey).Child("status");
statusRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
History history = new History(); //If you make class for history
history = dataSnapshot.getValue(History.class);
textViewStatus.setText(history.getStatus());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 2 :(得分:0)
DatabaseReference historyRef = FirebaseDatabase.getInstance().getReference().child("History");
historyRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()){
Log.d(TAG, "getKey: key = " + child.getKey());
Ride ride = child.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) {
}
});
}
//
// "driver" : "ptnVOKounjXE9VrmZCCvKoZWluf1",
// "rating" : 0,
// "ridePrice" : 5.25,
// "rider" : "C0RjB5NPZcTvWz9XiUAhpTDOK0C2",
// "status" : "accepted",
// "timestamp" : 1530662726
class Ride{
// Remove @Exclude https://firebase.google.com/docs/reference/android/com/google/firebase/database/Exclude
private String driver;
private int rating;
private float ridePrice;
private String rider;
private String status;
private long timestamp;
public Ride() {
// Empty Constructor
}
// Getter & Setter
}