我在使用值查询firebase数据库并获取特定节点时遇到问题。我的架构如下所示:
在我的模式中,'workLocations'属于'excavationWorks','excavationWorks'属于'挖掘列表'。
这意味着特定workLocation的路径为excavationLists/excavationWorks/workLocations/(specific workLocation)
我遇到的问题是我想通过位置值(比如伦敦)查询workLocations节点并获取父节点(红色圆圈键,它是特定workLocation的键)。
我搜索并阅读了很多帖子,但我还没有设法让它发挥作用。
我的代码如下所示:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("workLocations").orderByChild("location").equalTo("London");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot workLoc : dataSnapshot.getChildren()) {
// do something with the individual "issues"
Log.d(TAG, workLoc.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
谢谢
答案 0 :(得分:1)
要实现这一点,您需要像这样查询数据库两次:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
DatabaseReference workLocationsRef = reference
.child("excavationLists")
.child("excavationWorks")
.child("workLocations");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
for(DataSnapshot ds : dSnapshot.getChildren()) {
String key = ds.getKey();
Query query = workLocationsRef.child(key).orderByChild("location").equalTo("London");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String description = snapshot.child("description").getValue(String.class);
Log.d("description", description);
String partentKey = snapshot.getRef().getParent().getKey();
Log.d("partentKey", partentKey);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(eventListener);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
workLocationsRef.addListenerForSingleValueEvent(valueEventListener);