2017-08-03 3 views
0

Meine Feuerbasis Struktur sieht wie folgt aus: user structure
Die Gruppen verwenden Schlüssel, die von Feuerbasis erzeugt, 0 und 1 sind nur einige Beispiele.
enter image description here In diesen Gruppen gibt es mehr Daten wie "Gruppenname".Daten verlinkt werden von Firebase

Wie soll ich die Gruppennamen aller Gruppen abrufen, die mit einem Benutzer verknüpft sind?
Ich bin auf Android.

Gelöst von Alex.

Antwort

1

Unter der Annahme, dass der groups Knoten ein direkter Nachkomme des Firebase Wurzel ist und innerhalb einer einzigen Gruppe gibt es einen Schlüssel groupName genannt, benutzen Sie bitte den folgenden Code verwenden:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference groupsRef = rootRef.child("groups"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String name = ds.child("name").getValue(String.class); 
      Log.d("TAG", name); 
     } 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
groupsRef.addListenerForSingleValueEvent(eventListener); 

Wenn Sie in der Lage sein müssen nur die Gruppennamen der Gruppen erhalten, die Ihre Benutzer zu verknüpfen sind, müssen Sie zweimal wie folgt abfragen:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userGroupsRef = rootRef.child("users").child(userKey).child("groups"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String groupKey = ds.getKey(); 

      DatabaseReference groupKeyRef = rootRef.child("groups").child(groupKey); 
      ValueEventListener valueEventListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String name = dataSnapshot.child("name").getValue(String.class); 
        Log.d("TAG", name); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) {} 
      }; 
      groupKeyRef.addListenerForSingleValueEvent(valueEventListener); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
userGroupsRef.addListenerForSingleValueEvent(eventListener); 

In dem userKey die Schlüssel des Benutzers, von dem aus die die Gruppen-IDs erhalten möchten.

+0

Gibt dies nicht * alle * die Gruppennamen anstelle der Gruppennamen bestimmter Benutzergruppen zurück? –

+0

Das wird mir tatsächlich alle Gruppennamen meiner Gruppen bringen. Aber ich möchte in der Lage sein, nur die Gruppennamen der Gruppen zu erhalten, mit denen mein Benutzer verknüpft ist. – DeGoosseZ

+0

@alexkucksdorf Nein, tut es nicht. Es gibt die Gruppennamen aller meiner Gruppen zurück. –

Verwandte Themen