2016-05-27 1 views
1

Ich bin neu in Android entwickeln. Ich habe versucht, Daten von Firebase abzurufen. was funktioniert hat. aber ich kann den eindeutigen Bezeichner nicht aus den Datenbankergebnissen filtern.retrive Daten von Firebase

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myref = database.getReference("user_foods"); 
     myref.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.d("foods",dataSnapshot.getValue().toString()); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

Ergebnisse sind wie

XsgGhY7qUY5Qa3t8 = {food = apple}, ..... etc

Ich möchte, dass eindeutige Kennung entfernen & nur Ergebnisse als

angezeigt

Apfel, Mango ... usw.

danke

+0

Siehe https://firebase.google.com/docs/database/android/retrieve-data#child-events –

+0

kippt Verwendung getValue() hat. Beziehen () Methode –

+0

Wie Frank schlug Verwendung von Child-Event-Listener tat den Trick –

Antwort

1

Ich dachte mir die Antwort. Wenn jemand gleiches Problem use "Kind Ereignis-Listener"

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myref = database.getReference("user_foods"); 
    myref.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Log.d("foods",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) { 

     } 
    }); 
0

Try this:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myref = database.getReference("user_foods"); 
     myref.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snap: dataSnapshot.getChildren()) { 
       Log.d('foods',dataSnapshot.child('food').getValue().toString()); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

Zugabe Kind(), um Ihre Referenz Sie einen bestimmten Schlüssel in Ihrem Stammbaum zugreifen können. Aber wie Frank schlägt vor, versuchen Sie eine POJO-Klasse verwenden, um alle Ihre Daten aus Firebase

bearbeitet zu erhalten: sorry, ich habe vergessen, Sie hatten viele Kinder, müssen Sie dafür sorgen (DataSnapshot snap: dataSnapshot.getChildren()) {// code} Wenn Sie viele Kinder in Ihrem Knoten haben

+0

Wenn ich dataSnapshot.child ("Essen"). GetValue(). toString() es wirft "java.lang.NullPointerException" Wenn ich dataSnapshot.child (' food '). getValue(). toString() es wirft "zu viele Zeichen in Zeichen literal" Fehler –

+0

ja, sorry, dass Sie Lebensmittel hatten {1: Apfel, 2: Mango} Ich aktualisierte die Antwort – acrisfh