首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Firebase db数据快照从错误的db目录中拉取信息

Android Firebase db数据快照从错误的db目录中拉取信息
EN

Stack Overflow用户
提问于 2017-07-31 09:38:08
回答 1查看 127关注 0票数 0

在我的Android应用程序中,我使用Google Firebase将信息存储在数据库中。

我需要遍历这些信息,下面使用了for-loop

代码语言:javascript
复制
public void showDataLobReq(DataSnapshot dataSnapshot){

    for(DataSnapshot ds : dataSnapshot.child("Lobby_Requests").getChildren()){
        System.out.println("asdfasdfasdfasdfasdf"+ds.getValue());
        game = ds.child(userID).child("game").getValue(String.class);
        console = ds.child(userID).child("console").getValue(String.class);
        mic = ds.child(userID).child("mic").getValue(String.class);
        players = ds.child(userID).child("players").getValue(String.class);
    }


}

您可能会注意到,我将'.child("Lobby_Requests")‘放在dataSnapshot之后。这是因为dataSnapshot会拍摄整个数据库的快照,所以我必须进入"Lobby_Requests“子目录,因为我需要遍历的信息就在那里。

把这个'.child()‘放进去是有问题的。

我将dataSnapshot包含在for循环的第一行中的内容输出到控制台,并使用.child("Lobby_Requests")从实际数据库中的目录"Lobbies“中提取信息,这是一个完全不同的目录。

然而,当我完全删除'.child()‘时,它给了我一个应该看到的整个数据库的视图。它为什么要这么做?

监听器代码:

代码语言:javascript
复制
nRef = mFirebaseDatabase.getReference();
    nRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                showDataLobReq(dataSnapshot);
            } else {

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

以下是JSON:

代码语言:javascript
复制
{


"Games" : {
    "Forza 6" : {
      "Consoles" : {
        "PC" : true,
        "Xbox 1" : true,
        "Xbox 360" : true
      },
      "FilePathName" : "forza6",
      "Genres" : {
        "Racing" : true
      },
      "Live Lobbies" : 0,
      "Name" : "Forza 6"
    },
    "Minecraft" : {
      "Consoles" : {
        "PC" : true,
        "Xbox 1" : true,
        "Xbox 360" : true
      },
      "FilePathName" : "minecraft",
      "Genres" : {
        "Adventure" : true,
        "Creation" : true,
        "Open World" : true
      },
      "Live Lobbies" : 0,
      "Name" : "Minecraft"
    }
  },
  "Lobbies" : {
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
      "Messages" : {
        "-Kq6-1HsMvElEXZZyCIk" : {
          "messageText" : "hey",
          "messageTime" : 1501208519771,
          "messageUser" : ""
        }
      },
      "console" : "Origin",
      "game" : "Minecraft",
      "leader" : "Cd6lVd2XMUYoLH6b0xoHsrfXMud2",
      "mic" : "Mic",
      "note" : "2345",
      "players" : "4"
    },
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : {
      "console" : "Steam",
      "game" : "Forza 6",
      "mic" : "No Mic",
      "note" : "Hey Join Here!",
      "players" : "2"
    },
    "hpWkq0D8clPReUetOq9Xtmc4V582" : {
      "Messages" : {
        "-Kq5a0kX305lFCRTSM_G" : {
          "messageText" : "hello",
          "messageTime" : 1501201701014,
          "messageUser" : ""
        },
        "-Kq5asufOWQwtmyNJrQ7" : {
          "messageText" : "hey",
          "messageTime" : 1501201926941,
          "messageUser" : ""
        }
      },
      "console" : "Xbox One",
      "game" : "Minecraft",
      "leader" : "hpWkq0D8clPReUetOq9Xtmc4V582",
      "mic" : "Mic",
      "note" : "kjhg",
      "players" : "4"
    }
  },
  "Lobby_Requests" : {
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
      "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
        "console" : "Xbox One",
        "game" : "Forza 6",
        "mic" : "Mic",
        "players" : "5"
      }
    },
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : {
      "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : {
        "console" : "Steam",
        "game" : "Forza 6",
        "mic" : "No Mic",
        "players" : "2"
      }
    },
    "hpWkq0D8clPReUetOq9Xtmc4V582" : {
      "hpWkq0D8clPReUetOq9Xtmc4V582" : {
        "console" : "Xbox One",
        "game" : "Minecraft",
        "mic" : "Mic",
        "players" : "4"
      },
      "players" : "4"
    }
  },
  "users" : {
    "8cHrNCybwjO3PIUKxyOLiAqxJBv1" : {
      "gamertag" : "thedylan",
      "uname" : "thedood"
    },
    "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
      "gamertag" : "dmdylan",
      "uname" : "ninja goat"
    },
    "KUWH5f1TmYfO1O1wgCJLli3XZFi2" : {
      "gamertag" : "skaner",
      "uname" : "asdf"
    },
    "YvYEIiCBUSYKTviVyWpLHdyDIFw1" : {
      "gamertag" : "joejoe",
      "uname" : "Jifflingly"
    },
    "ZmX9yIZ6MNguQa1S3MaYNcxfK2b2" : {
      "gamertag" : "dmkaner",
      "uname" : "dmkaner"
    },
    "hpWkq0D8clPReUetOq9Xtmc4V582" : {
      "gamertag" : "dmkaner",
      "uname" : "dmkaner"
    },
    "t21ncnuRmeV4F7RknETBisMrxS42" : {
      "gamertag" : "asdf",
      "uname" : "asdf"
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2017-07-31 18:38:16

你的代码中的问题是你正在推送你的数据两次,这是没有必要的。

代码语言:javascript
复制
  "Lobby_Requests" : {
      "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
          "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : { //This is wrong

如果你改变了将数据添加到Firebase数据库的方式,只将数据推入一次,那么你的代码就可以正常工作了。您的数据库应如下所示:

代码语言:javascript
复制
"Lobby_Requests" : {
  "Cd6lVd2XMUYoLH6b0xoHsrfXMud2" : {
    "console" : "Xbox One",
    "game" : "Forza 6",
    "mic" : "Mic",
    "players" : "5"
  },

正如你可能看到的,只有一个按键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45406391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档