如何从Firebase检索数据和特定用户数据

时间:2017-03-28 05:28:19

标签: android firebase firebase-realtime-database

我在从firebase检索数据时遇到问题。我有一个root用户的节点,然后在该根目录中我有一个userID子节点。在该子节点内,我根据其血型存储用户信息。

现在,我想要的是根据血型获取姓名和电子邮件,说取出血型为B +的所有用户数据。

另外,请告诉我如何获取firebase中的所有条目并在textView上显示。

    //show data on text view
    datashow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.i("inside click", "onClick: ");
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference db = database.getReference();
            db.child("users").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    User user = dataSnapshot.getValue(User.class);
                    if (user == null) {
                        Log.e(TAG, "User data is null!");
                        return;
                    }
                    Iterable<DataSnapshot > children = dataSnapshot.getChildren();
                    Log.i("children", "onDataChange: " + children);
                    for(DataSnapshot child : children)
                    {
                        Map<String , String> map = (Map)child.getValue();
                        Log.i("inside", "onDataChange: " + map);
                        name  = map.get("name");
                        email = map.get("email");
                        dateof = map.get("userDob");
                        showData(name , email  , dateof );
                        Log.i("datasnap", "onDataChange: data snapshot " + name + email + dateof);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    });

这是我对Firebase数据库的快照

enter image description here

2 个答案:

答案 0 :(得分:1)

    db.child("users").orderByChild("userBloodGroup").equalTo("B+").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
             List<User> data = new ArrayList<>();
                    if (dataSnapshot.exists()) {
                for (DataSnapshot snapshot :
                        dataSnapshot.getChildren()) {
                   User element = snapshot.getValue(User.class);
                    element.setKey(snapshot.getKey());
                    data.add(element);

                }
           for (User user: data){
Log.i(TAG,"user name: " +user.getName());
    Log.i(TAG,"user email: " +user.getEmail());
  Log.i(TAG,"user dob: " +user.getUserDob());
 }
                }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i(TAG, "loadPost:onCancelled", databaseError.toException());
        }

    });

答案 1 :(得分:0)

要使用 bloodGroup B +查询所有用户,请使用Firebase查询:

firebaseReference("users").orderByChild("userBloodGroup").equalTo("B+")

要获取用户的所有数据,您可以使用监听器获取所有这些数据并将它们放入您需要的任何TextView中。您可以查看Firebase上有关他们如何读取数据的文档。 https://firebase.google.com/docs/database/android/read-and-write