Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从具有相同ID的特定子节点检索数据';s_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何从具有相同ID的特定子节点检索数据';s

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

以下是我的firebase数据库的外观:

正如你们在上面看到的,我在播放器里有3个Id。这三个孩子的游戏id都是相同的。我想知道的是检索
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