Java 如何从具有相同ID的特定子节点检索数据';s
以下是我的firebase数据库的外观: 正如你们在上面看到的,我在播放器里有3个Id。这三个孩子的游戏id都是相同的。我想知道的是检索Java 如何从具有相同ID的特定子节点检索数据';s,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,以下是我的firebase数据库的外观: 正如你们在上面看到的,我在播放器里有3个Id。这三个孩子的游戏id都是相同的。我想知道的是检索mDisplayName,其中游戏id是“-KweUgQj9sV01KvgbCu” 这是我现在的代码,但它不起作用。我做错了什么?我该怎么做 DatabaseReference nishi = FirebaseDatabase.getInstance().getReference("players"); nishi.child("-KweUgQ
mDisplayName
,其中游戏id
是“-KweUgQj9sV01KvgbCu”
这是我现在的代码,但它不起作用。我做错了什么?我该怎么做
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) {
}
});
DatabaseReference nishi=FirebaseDatabase.getInstance().getReference(“玩家”);
nishi.child(“-KweUgQj9sV01KvgbCu”).addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
List commentKeys=new ArrayList();
对于(DataSnapshot childSnapshot:snapshot.getChildren()){
add(childSnapshot.getValue());
}
Log.d(“数据:,commentKeys.toString());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
您需要使用equalTo(…)
:
您需要使用
equalTo(…)
:
您应该创建一个包含变量name、id和points的用户模型,然后编写如下所示的代码:
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) {
}
});
您应该创建一个包含变量name、id和points的用户模型,然后编写如下所示的代码:
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) {
}
});
您需要按以下方式查询数据:
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) {
}
});
DatabaseReference nishi=FirebaseDatabase.getInstance().getReference(“玩家”);
Query Query=nishi.orderByChild(“game_id”).equalTo(“-KweUgQj9sV01KvgbCu”);
addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
List commentKeys=new ArrayList();
对于(DataSnapshot childSnapshot:snapshot.getChildren()){
add(childSnapshot.getValue());
}
Log.d(“数据:,commentKeys.toString());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
您需要像这样查询数据:
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) {
}
});
DatabaseReference nishi=FirebaseDatabase.getInstance().getReference(“玩家”);
Query Query=nishi.orderByChild(“game_id”).equalTo(“-KweUgQj9sV01KvgbCu”);
addValueEventListener(新的ValueEventListener(){
@凌驾
公共无效onDataChange(数据快照快照){
List commentKeys=new ArrayList();
对于(DataSnapshot childSnapshot:snapshot.getChildren()){
add(childSnapshot.getValue());
}
Log.d(“数据:,commentKeys.toString());
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
您无法用实际的数据库结构实现这一点,因此需要使用反规范化来解决这一问题。这意味着您需要稍微更改数据库结构,方法是创建另一个名为gameid
的节点,在该节点中,您需要在每个游戏id下添加所有用户的所有名称。您的数据库结构应如下所示:
Firebase-root
|
--- gameIds
|
--- -KweUgQj9sV01KvgbCu
|
--- Users
|
--- Name1: true
|
--- Name2: true
|
--- Name3: true
最后,只需在这个新创建的节点上附加一个侦听器,并从响应特定游戏id的dataSnapshot
对象中获取所有名称。用实际的数据库结构无法实现这一点,因此需要使用反规范化来解决此问题。这意味着您需要稍微更改数据库结构,方法是创建另一个名为gameid
的节点,在该节点中,您需要在每个游戏id下添加所有用户的所有名称。您的数据库结构应如下所示:
Firebase-root
|
--- gameIds
|
--- -KweUgQj9sV01KvgbCu
|
--- Users
|
--- Name1: true
|
--- Name2: true
|
--- Name3: true
最后,只需在这个新创建的节点上附加一个侦听器,并从响应特定游戏id的dataSnapshot
对象中获取所有名称。这不是正确答案。使用此代码,您不会获得名称
的值,而是获得类型为映射
的对象,更具体地说,是一个无法简单获得名称的哈希映射。您已将此答案标记为true,但事实并非如此。此答案仅用于演示从特定游戏id获取DataSnapshot的查询。从DataSnapshot获取名称或任何属性取决于开发者@AlexMamoThis不是正确答案。使用此代码,您不会获得名称
的值,而是获得类型为映射
的对象,更具体地说,是一个无法简单获得名称的哈希映射。您已将此答案标记为true,但事实并非如此。此答案仅用于演示从特定游戏id获取DataSnapshot的查询。从DataSnapshot获取名称或任何属性取决于developers@AlexMamo