正如你在上面所看到的,我有3个Id在玩家。 game_id
在所有三个孩子中都是相同的。我想知道的是检索mDisplayName
game_id
为"-KweUgQj9sV01KvgbCu"
的{{1}}。
这是我现在的代码,但它不起作用。我做错了什么,我应该怎么做?
DatabaseReference nishi = FirebaseDatabase.getInstance().getReference("players");
nishi.child("-KweUgQj9sV01KvgbCu").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<Object> commentKeys = new ArrayList<>();
for (DataSnapshot childSnapshot: snapshot.getChildren()) {
commentKeys.add(childSnapshot.getValue());
}
Log.d("Data:", commentKeys.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
您应该创建一个包含变量name,id和points的User模型,然后编写如下所示的代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("players").equalTo("-KweUgQj9sV01KvgbCu").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot s: snapshot.getChildren()) {
User user = s.getValue(User.class);
Log.e("Display Name: ", user.getName());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 1 :(得分:1)
您需要像这样查询您的数据:
DatabaseReference nishi = FirebaseDatabase.getInstance().getReference("players");
Query query = nishi.orderByChild("game_id").equalTo("-KweUgQj9sV01KvgbCu");
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
List<Object> commentKeys = new ArrayList<>();
for (DataSnapshot childSnapshot: snapshot.getChildren()) {
commentKeys.add(childSnapshot.getValue());
}
Log.d("Data:", commentKeys.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 2 :(得分:0)
您需要使用equalTo(...)
:
FirebaseDatabase.getInstance().getReference("players").equalTo("-KweUgQj9sV01KvgbCu", "game_id")
.addChildEventListener(new ChildEventListener() {
// TODO: implement the ChildEventListener methods
// ...
});
答案 3 :(得分:0)
使用实际的数据库结构无法实现此目的,因此您需要使用denormalization
来解决此问题。这意味着,您需要通过创建另一个名为gameIds
的节点来更改数据库结构,在该节点中您需要添加每个游戏ID下所有用户的所有名称。您的数据库结构应如下所示:
Firebase-root
|
--- gameIds
|
--- -KweUgQj9sV01KvgbCu
|
--- Users
|
--- Name1: true
|
--- Name2: true
|
--- Name3: true
最后,只需在这个新创建的节点上附加一个侦听器,并从dataSnapshot
对象中获取与特定游戏ID相对应的所有名称。