web-dev-qa-db-fra.com

Comment récupérer une liste spécifique de données à partir de firebase

Je suis nouveau dans les bases de données firebase et nosql

J'essaie de récupérer des données spécifiques d'une base Firebase. J'ai un noeud universities et ce noeud a beaucoup d'identifiant unique en tant que noeud qui contient tellement de données. Je veux récupérer name de chaque nœud. 

S'il vous plaît jeter un oeil à cela.

 enter image description here

Ce que j’ai essayé jusqu’à présent: j’ai essayé d’utiliser addChildEventListener mais cela n’écoute que le premier enfant. Je l'ai débogué et il ne montrait que les valeurs du premier enfant du noeud universities.

myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            List<University> university = new ArrayList<>();
            Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue();

            Log.d("TAG",dataSnapshot.getValue().toString());
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

J'ai aussi essayé addValueEventListener. Cela écoute le noeud entier et renvoie des données complètes, mais je ne parviens pas à en extraire le "nom", car il contient des identificateurs uniques.

Veuillez me guider dans les bonnes directions.

myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                University university = dataSnapshot.getValue(University.class);
                List<University> universities = (List<University>) dataSnapshot.getValue(University.class);
                *//*List<String> lst = new ArrayList<String>();

            for(DataSnapshot dsp : dataSnapshot.getChildren()){
                lst.add(dsp.getKey());
            }
            Log.d("TAG",lst.toString());*//*

            Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue();


            *//*List<Object> values = new ArrayList<Object>(td.values());
            List<String> list=new ArrayList<String>();
            for(int i=0; i<values.size(); i++){
                list.add((String) values.get(i));
            }*//*
            Log.d("TAG", university.toString());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
9
Zeeshan Shabbir

Si vous utilisez addValueEventListener pour extraire toutes les universités de Firebase

List<University> universityList = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        universityList.clear();
        for (DataSnapshot postSnapshot: snapshot.getChildren()) {
            University university = postSnapshot.getValue(University.class);
            universityList.add(university);

            // here you can access to name property like university.name

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});

Ou si vous utilisez addChildEventListener

List<University> universityList = new ArrayList<>();
myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
         University university = dataSnapshot.getValue(University.class);
         universityList.add(university);
         Log.i(TAG,"add university name = " + university.name);
         ...
    }
    ...
}
18
Linh

Vous pouvez utiliser equalTo () de Query dans lequel vous pouvez transmettre votre chaîne personnalisée pour qu'elle corresponde à la base de données firebase.

comme cela, vous pouvez créer votre requête et définir un auditeur avec cette

Query queryRef = myFirebaseRef.orderByChild("name").equalTo("some name");

se référer this thread pour plus.

Ici est un bel exemple des représentants de Firebase, référez-le et vous aurez une idée claire

1
Ravi Rupareliya
   public void onDataChange(DataSnapshot dataSnapshot) {
           for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
               User user = postSnapshot.getValue(User.class);
               list.add(user);
           }
       }

utilisateur de classe

class User{

String name;

String phone;

public String getname() {
    return name;
}

public void setname(String name) {
    this.name = name;
}


public String getphone() {
    return phone;
}

public void setphone(String phone) {
    this.phone = phone;
}

Liste de liaison avec la classe

List<User> list== new ArrayList <>();

100% cela fonctionnera

0
frankenstein

Concernant la réponse de Linh à propos de l’utilisation de la méthode addEventListener. Vous pouvez utiliser GenericTypeIndicator afin de créer directement la liste des objets dont vous aurez besoin. Voici un exemple rapide:

List<University> universityList = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        GenericTypeIndicator<List<University>> t = new GenericTypeIndicator<List<University>>() {};
        universityList = snapshot.getValue(t);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});

J'espère que cette réponse aide.

0
Robert