wake-up-neo.com

So rufen Sie eine bestimmte Datenliste von Firebase ab

Ich bin neu in der Datenbank firebase und nosql

Ich versuche, bestimmte Daten von einer Firebase abzurufen. Ich habe einen Knoten universities und dieser Knoten hat viele eindeutige Bezeichner als Knoten, der so mehr Daten enthält. Ich möchte name von jedem Knoten abrufen. 

Bitte schauen Sie sich das an.

 enter image description here

Was ich bisher ausprobiert habe: Ich habe versucht, addChildEventListener zu verwenden, aber das hört nur das erste Kind. Ich habe es debuggt und es wurden nur die Werte des ersten untergeordneten Objekts von universities angezeigt.

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) {

        }
    });

Ich habe auch addValueEventListener ausprobiert. Dadurch wird der gesamte Knoten abgehört und vollständige Daten zurückgegeben. Ich kann jedoch keinen "Namen" dafür extrahieren, da er eindeutige Bezeichner enthält.

Bitte führen Sie mich in die richtige Richtung.

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

Wenn Sie addValueEventListener zum Abrufen aller Universitäten von Firebase verwenden

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());
    }
});

Oder wenn Sie addChildEventListener verwenden

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

Sie können equalTo () von Query verwenden, um Ihre benutzerdefinierte Zeichenfolge an die Firebase-Datenbank anzupassen.

auf diese Weise können Sie Ihre Abfrage erstellen und Listener damit festlegen

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

verweisen Sie auf this thread für mehr.

Hier ist ein schönes Beispiel von Firebase-Funktionären, verweisen Sie darauf und Sie werden eine klare Vorstellung bekommen

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

Klasse Benutzer

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 mit Klasse binden

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

100% wird es funktionieren

0
frankenstein

Zu Linhs Antwort zur Verwendung der addEventListener-Methode. Sie können GenericTypeIndicator verwenden, um die Liste der benötigten Objekte direkt zu erstellen. Hier ein kurzes Beispiel:

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());
    }
});

Hoffe, diese Antwort hilft.

0
Robert