如何从我不知道名字的孩子列表中检索数据?

时间:2018-04-22 11:05:31

标签: android firebase firebase-realtime-database

您好我是Firebase和Java的新手,我正在寻找一个有希望的答案。这是我的数据库:

在我的代码中,用户从单独的文本字段输入名称和编号。我使用该名称在“客户端”中生成一个孩子。我想要做的是取“Name”和“Number”值并将它们输出到我的应用程序的文本中。问题是我很难弄清楚如何引用Client的子节点来输出数据。 Alex,David,Will只是用户输入的任何值的占位符,所以我如何引用一个我不知道名字的孩子?

2 个答案:

答案 0 :(得分:1)

首先检索您的客户数据快照

//Get datasnapshot at your "users" root node
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Client");
    ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    //Get map of users in datasnapshot
                    collectInfo((Map<String,Object>) dataSnapshot.getValue());
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    //handle databaseError
                }
            });

然后循环访问客户端,访问他们的地图

private void collectInfo(Map<String,Object> clients) {

    //iterate through each client
    for (Map.Entry<String, Object> entry : clients.entrySet()){

        //Get client map
        Map singleClient = (Map) entry.getValue();
        // Do whatever you want to do with single clients
    }
}

答案 1 :(得分:0)

这是一个简单的方法:

DatabaseReference clientsRef = FirebaseDatabase.getInstance().getReference().child("Client");
clientsRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot clientSnapshot: dataSnapshot.getChildren()) {
            System.out.println(clientSnapshot.getKey()); // "Alex", "David", "Will"
            System.out.println(clientSnapshot.child("Name").getValue(String.class)); // "Alex", "David", "Will"
            System.out.println(clientSnapshot.child("Number").getValue(String.class)); // "12345", "98765", "12345"
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

如果您刚开始使用Android开发和Firebase,我建议您首先使用this codelab。它将为您节省很多时间(和问题)。