2016-07-29 7 views
7

Ich bin neu in firebase und nosql DatenbankWie bestimmte Liste von Daten aus Feuerbasis

Ich versuche abzurufen einige spezifische Daten von einem 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 sehen Sie sich das an.

enter image description here

Was ich versucht habe, so weit: Ich habe versucht addChildEventListener verwenden, aber das hört nur das erste Kind. Ich habe es debuggt und es zeigte nur die Werte des ersten Kindes von universities Knoten.

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 versucht addValueEventListener. Das hört den gesamten Knoten ab und gibt ganze Daten zurück, aber ich kann "Name" für es nicht extrahieren, da es eindeutige Bezeichner enthält.

Bitte führen Sie mich in die richtigen Richtungen.

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

     } 
    }); 

Antwort

13

Wenn Sie addValueEventListener für alle Universität von 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()); 
    } 
}); 

Oder wenn Sie 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); 
     ... 
    } 
    ... 
} 
mit wiedergeholt werden erhalten
+0

ok ich habe die erste Methode benutzt. Diese Methode. Speichern Sie die HashMap-Daten in die Liste. Ich meine, es hat jetzt insgesamt 3 Index. Und jeder Index enthält HashMap Art von Daten. Und ich möchte einen Namen daraus machen. Wie würde ich es tun? –

+0

Ich sehe die Art der Verwendung mit in Ihrem Beitrag ist anders. in meinem Code (in einer Methode), innerhalb der for-Schleife erhalten Sie das Univerty-Objekt, und verwenden Sie können Name Eigenschaft von universal.name –

+0

Dank Sie es geholfen –

1

Sie können EqualTo() verwenden, von Query in dem Sie Ihre individuelle Zeichenfolge übergeben mit Feuerbasis Datenbank übereinstimmen.

wie diese Weise können Sie Ihre Anfrage und setzen Hörer mit diesem

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

siehe this Thread für mehr erstellen können.

Here schönes Beispiel von Feuerbasis Beamten entnehmen, dass und Sie werden klare Vorstellung

+0

würde diese Abfrage mich von jedem Kind der Universitäten Knoten zurückgeben? '' 'Abfrage queryRef = myFirebaseRef.orderByChild (" name ")' '? –

+0

@Zeyshan Shabbir Nein, es werden alle Benutzer zurückgegeben, die nach den Werten der Eigenschaftsnamen geordnet sind. – MeLine

Verwandte Themen