2017-03-28 8 views
1

Ich habe Probleme beim Abrufen von Daten aus der Firebase. Ich habe einen root Benutzerknoten und dann innerhalb dieses root habe ich einen BenutzerID Kindknoten. Innerhalb dieses Kindknotens speichere ich Benutzerinformationen entsprechend seiner Blutgruppe.So rufen Sie Daten und bestimmte Benutzerdaten vom Firebase ab

Nun, was ich will, ist den Namen und die E-Mail nach Blutgruppe zu holen, sagen Sie holen alle Benutzerdaten, deren Blutgruppe B + ist.

Bitte sagen Sie mir auch, wie Sie alle Einträge in der Firebase abrufen und auf textView zeigen.

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

       } 
      }); 
     } 
    }); 

das ist mein Snapshot für Firebase Datenbank

enter image description here

+0

klicken Sie einfach auf „Bildbeschreibung hier eingeben“ und Sie werden die Momentaufnahme von Daten Feuerbasis sehen –

+0

Sie haben einen Link zu einem Bild des JSON Baum in Ihrer Frage enthalten. Bitte ersetzen Sie dies durch den tatsächlichen JSON als Text, den Sie einfach erhalten, wenn Sie auf den Link JSON exportieren in [Ihrer Firebase-Datenbankkonsole] klicken (https://console.firebase.google.com/project/_/database/data/). . Wenn der JSON als Text durchsuchbar ist, können wir ihn einfach verwenden, um ihn mit Ihren tatsächlichen Daten zu testen und in unserer Antwort zu verwenden. Im Allgemeinen ist dies nur eine gute Sache (https://meta.stackoverflow.com/). Fragen/285551/Warum-kann-ich-nicht-Upload-Bilder-von-Code-auf-so-wenn-eine Frage zu stellen/285557 # 285557). –

+1

@FrankvanPuffelen Vielen Dank für Ihre Antwort Ich werde definitiv hinzufügen Json Baum in meiner Frage –

Antwort

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

    }); 
+0

Vielen Dank für Ihre Antwort, es hat mir wirklich geholfen –

+0

Vielen Dank @Rihab für Ihre Antwort, aber es hat ein Problem die Methode 'Public void onDataChange' hat keine Rückkehr Geben Sie immer noch Sie die Liste "Daten" zurück, die Fehler gibt und ich habe "null" als Wert im Protokoll und wenn ich die App debuggen zeigt die "userBloodGroup" Nullwert –

+0

@rajatsingh Ich habe die Antwort aktualisiert, ich hoffe es klappt jetzt :)) vergiss nicht die getter nd setter zu deiner usereinheit hinzuzufügen – Rihab

1

Um für alle Benutzer mit dem Blutgruppe B + abzufragen, verwenden Sie eine Firebase Abfrage:

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

Um alle die Daten der Benutzer, können Sie einen Listener verwenden, um alle von ihnen zu erhalten und sie in was auch immer TextView Sie benötigen. Sie können in der Dokumentation zu Firebase nachlesen, wie sie Daten lesen. https://firebase.google.com/docs/database/android/read-and-write

Verwandte Themen