Java 如何从Firebase检索多个数据项并将这些字符串合并在一起?

Java 如何从Firebase检索多个数据项并将这些字符串合并在一起?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个Firebase数据库,它存储学生时间表的数据。多个数据项的位置如下所示: 模块=时间表>课程>日期>时间>模块数据 房间=时间表>课程>日期>时间>房间数据 我的目标是将这些数据项检索到两个字符串中,并将它们合并到一个字符串中。然而,我遇到的问题是,检索数据项需要单独的onDataChange方法,这意味着我无法访问该字符串之外的字符串以将其与另一个字符串合并 这是我检索模块数据的代码: //Monday for (i = 9; i <=

我有一个Firebase数据库,它存储学生时间表的数据。多个数据项的位置如下所示:

模块=时间表>课程>日期>时间>模块数据

房间=时间表>课程>日期>时间>房间数据

我的目标是将这些数据项检索到两个字符串中,并将它们合并到一个字符串中。然而,我遇到的问题是,检索数据项需要单独的onDataChange方法,这意味着我无法访问该字符串之外的字符串以将其与另一个字符串合并

这是我检索模块数据的代码:

                //Monday
    for (i = 9; i <= 18; i++) {
        String time = Integer.toString(i);
        final String MonTime = "Mon" + i;

        DatabaseReference Module = mRef.child("Monday").child(time).child("Module");
        Monday.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String MonValue = dataSnapshot.getValue(String.class);
                int id = getResources().getIdentifier(MonTime, "id", getPackageName());
                TextView Monday = (TextView) findViewById(id);
                Monday.setText(MonValue);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

假设您按照我认为的方式构建了数据库,这应该会起作用。我不明白你为什么说你不能在一个时间内做到这一点。我还取出了那个环

mRef.child("Monday").orderByKey().startAt("9").endAt("18").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot child : dataSnapshot.getChildren()) {
                HashMap<String, String> value = (HashMap<String, String>) child.getValue();
                String module = value.get("module");
                String room = value.get("room");
                System.out.println(room + module);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
编辑 带循环:

for (i = 9; i <= 18; i++) {
        String time = Integer.toString(i);
        final String MonTime = "Mon" + i;

        dbRef.child("Monday").child(time).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String module = dataSnapshot.child("Module").getValue(String.class);
                String room = dataSnapshot.child("Room").getValue(String.class);
                int id = getResources().getIdentifier(MonTime, "id", getPackageName());
                TextView Monday = (TextView) findViewById(id);
                Monday.setText(MonValue);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
}

假设您按照我认为的方式构建了数据库,这应该会起作用。我不明白你为什么说你不能在一个时间内做到这一点。我还取出了那个环

mRef.child("Monday").orderByKey().startAt("9").endAt("18").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot child : dataSnapshot.getChildren()) {
                HashMap<String, String> value = (HashMap<String, String>) child.getValue();
                String module = value.get("module");
                String room = value.get("room");
                System.out.println(room + module);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
编辑 带循环:

for (i = 9; i <= 18; i++) {
        String time = Integer.toString(i);
        final String MonTime = "Mon" + i;

        dbRef.child("Monday").child(time).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String module = dataSnapshot.child("Module").getValue(String.class);
                String room = dataSnapshot.child("Room").getValue(String.class);
                int id = getResources().getIdentifier(MonTime, "id", getPackageName());
                TextView Monday = (TextView) findViewById(id);
                Monday.setText(MonValue);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
}

我找到了使用snapshot foreach返回数据的方法

 firebase.database().ref('events').once('value',(data)=>{
      //console.log(data.toJSON());
      data.forEach(function(snapshot){
        var newPost = snapshot.val();
        console.log("description: " + newPost.description);
        console.log("interest: " + newPost.interest);
        console.log("players: " + newPost.players);
        console.log("uid: " + newPost.uid);
        console.log("when: " + newPost.when);
        console.log("where: " + newPost.where);
      })

      })

我找到了使用snapshot foreach返回数据的方法

 firebase.database().ref('events').once('value',(data)=>{
      //console.log(data.toJSON());
      data.forEach(function(snapshot){
        var newPost = snapshot.val();
        console.log("description: " + newPost.description);
        console.log("interest: " + newPost.interest);
        console.log("players: " + newPost.players);
        console.log("uid: " + newPost.uid);
        console.log("when: " + newPost.when);
        console.log("where: " + newPost.where);
      })

      })

获取您需要的项目,并在两个项目都已获得时合并它们?老实说,看起来你并没有花太多精力。发布一些代码和数据库设计。我已经尝试过了,但是检索数据需要一个值侦听器,它为调用中的DatabaseReference生成onDataCreate方法。这意味着,当我去检索另一个数据项时,我无法再访问我要合并的初始项。是否将一个值侦听器放在另一个值侦听器中?无论如何,如果你发布一些代码,这样我们就可以看到你的错误。我也厌倦了,它们都产生了单独的方法,所以我无法访问第二个方法中的初始字符串。我发布了一些代码,对不起,我是新手;仍然在努力掌握它的诀窍获取您需要的项目,并在您拥有这两个项目时合并它们?老实说,看起来你并没有花太多精力。发布一些代码和数据库设计。我已经尝试过了,但是检索数据需要一个值侦听器,它为调用中的DatabaseReference生成onDataCreate方法。这意味着,当我去检索另一个数据项时,我无法再访问我要合并的初始项。是否将一个值侦听器放在另一个值侦听器中?无论如何,如果你发布一些代码,这样我们就可以看到你的错误。我也厌倦了,它们都产生了单独的方法,所以我无法访问第二个方法中的初始字符串。我发布了一些代码,对不起,我是新手;仍在努力掌握itI的窍门,我使用for循环在我的android布局中填充时间表。谢谢,我相信这将工作,一旦我玩它,以填充我的表的代码似乎是工作,但我似乎无法找到一种方法,它来适应我原来的循环。有必要相应地填充我的表。我该怎么做?我不知道我为什么这么说,太愚蠢了,看看我为你的循环编辑的答案。我用for循环在我的android布局中填充时间表。谢谢,我相信这将工作,一旦我玩它,以填充我的表的代码似乎是工作,但我似乎无法找到一种方法,它来适应我原来的循环。有必要相应地填充我的表。我该怎么做呢?我不知道我为什么这么说,那太愚蠢了,看看我为你的循环编辑的答案。