适用于Android的Firebase,我如何遍历一个孩子(对于每个孩子= x做y)

时间:2016-11-01 18:52:03

标签: java android firebase firebase-realtime-database

这是我的测试结果:

enter image description here

我不会使用上面的字段,它只是一个假人。但我想通过"用户"并为每封电子邮件返回:

System.out.println(emailString);

我找到列出对象的唯一方法是使用firebaseAdapter,还有另一种方法吗?

5 个答案:

答案 0 :(得分:34)

最简单的方法是使用ValueEventListener。

    FirebaseDatabase.getInstance().getReference().child("users")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        User user = snapshot.getValue(User.class);
                        System.out.println(user.email);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });

答案 1 :(得分:4)

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.addValueEventListener(new ValueEventListener() {
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {
    for(DataSnapshot item_snapshot:dataSnapshot.getChildren()) {

      Log.d("item id ",item_snapshot.child("item_id").getValue().toString());
      Log.d("item desc",item_snapshot.child("item_desc").getValue().toString());
     }
  }
}

答案 2 :(得分:3)

假设您有对用户节点的引用,您可以按如下方式遍历节点:

reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot child : dataSnapshot.getChildren() ){
                // Do magic here
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {}
    });

请注意,for循环中的DataSnapshot child将UID作为键,而不是用户

答案 3 :(得分:1)

使用Iterator遍历dataSnapshot

  public void onDataChange(DataSnapshot snapshot) {
            Iterator<DataSnapshot> items = snapshot.getChildren().iterator();
            int counter = 0;
            while (items.hasNext()) {
                DataSnapshot item = items.next();
                Log.i("Result", "email" + item.child("email").getValue().toString());
                Log.i("Result", "User ID" + item.child("userId").getValue().toString());
                Log.i("Result", "User Name" + item.child("username").getValue().toString());
            }
        }

迭代器将遍历用户的所有子元素,并使用items.next()来访问用户子对象的子对象

答案 4 :(得分:0)

我知道我回答得太晚了,但我必须

 FirebaseDatabase.getInstance().getReference().child("users")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                      String user = snapshot.child("email").getValue().toString();
                        System.out.println(user);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });

此程序将打印所有用户电子邮件

我期待输出

my@email.com
jonathanwells@email.com
freddyreich@email.com