2016-07-10 3 views
0

Ich versuche, eine Liste der Kinder an einem bestimmten Ort abrufen, aber ich bekomme nur Kauderwelsch, wenn ich das mache, was ich denke, ist richtig.Firebase Android Probleme beim Abrufen einer Liste von Kindern an einem bestimmten Ort

für das Abrufen von Daten Mein Code:

final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 


    ChildEventListener childEventListener = new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey()); 
      adapter.add(dataSnapshot.child(userId).getChildren().toString()); 
     } 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey()); 
      adapter.add(dataSnapshot.child(userId).getChildren().toString()); 
     } 
     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
      Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey()); 
      adapter.add(dataSnapshot.child(userId).getChildren().toString()); 
     } 
     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 
      Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey()); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "postComments:onCancelled", databaseError.toException()); 
      Toast.makeText(getActivity(), "Failed to load entries.", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 
    mDatabase.addChildEventListener(childEventListener); 

Screenshots von Datenstruktur datastructure

Was ich eine Liste der Kinder unter dem userId abrufen versuchen. Was mache ich falsch?

+0

sollten Sie verwenden [ '.getValue()'] (https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#getValue()) zu den Daten, die Sie von Firebase erhalten, um die Daten zu sehen, die Sie benötigen –

+0

versucht mit .getValue() anstelle von .getChildren(), aber das stürzt wegen einer java.lang.NullPointerException: Versuch, die virtuelle Methode 'java.lang. Die Zeichenfolge java.lang.Object.toString() 'für einen Nullobjektverweis –

Antwort

1

Ich glaube nicht, dass Sie die ChildEventListener zum Root-Knoten Ihrer Firebase-Datenbank hinzufügen sollten, da dies alle Daten in Ihrer Datenbank herunterladen würde.

Rufen Sie es stattdessen auf den bestimmten Benutzer, da Sie nur für diese UID möchten.

final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
mDatabase = FirebaseDatabase.getInstance().getReference(userId); 


ChildEventListener childEventListener = new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey()); 
     // maybe use a POJO here to collect data easily 
     // the toString() method is maybe for testing?? 
     adapter.add(dataSnapshot.getValue().toString()); 
    } 
    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
     // This part should have appropriate code 
     // Unless of course you actually want to add it 
     //to the adapter everytime 
    } 
    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 
     // This part should have appropriate code 
     // Unless of course you actually want to add it 
     //to the adapter everytime 
    } 
    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 
     Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey()); 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Log.w(TAG, "postComments:onCancelled", databaseError.toException()); 
     Toast.makeText(getActivity(), "Failed to load entries.", 
       Toast.LENGTH_SHORT).show(); 
    } 
}; 
mDatabase.addChildEventListener(childEventListener); 
+0

hat die Änderungen, die Sie jetzt vorgeschlagen haben, ausprobiert, aber das wirft nur einen neuen Fehler auf. es heißt throwable java.lang.ClassCastException: java.util.HashMap kann nicht in java.lang.String umgewandelt werden. Bedeutet das, dass ich tatsächlich alles unter userId zurückbekomme? Ich will nur das erste Kind unter userId .. –

+1

Sie sollten wirklich ein POJO verwenden, um die eingehenden Daten zu speichern. Willst du nur das erste Kind? –

+0

Hallo, Entschuldigung für die langsame Antwort, ich war für ein paar Tage weg. Ja, ich möchte nur eine Liste der ersten Kinder unter der Benutzer-ID. Ich bin nicht sicher, was ein POJO ist oder wie man es macht .... Ja, ich bin ein Noob .. –

Verwandte Themen