2016-03-20 11 views
0

Ich habe gekämpft, um Daten von Firebase in meiner Android-Anwendung abrufen, ich verstehe nicht, wie würde ich einen Knoten abrufen, die mehrere untergeordnete Knoten hat.Abrufen von Arraylist POJO in einem übergeordneten POJO, von Firebase

Die Situation ist, dass ich einen Knoten in Feuerbasis haben ‚schnappt‘, die einen untergeordneten Knoten hat ‚mag‘. Der Knoten "snaps" wird erstellt, wenn ein Benutzer ein Foto hochlädt und der Knoten "likes" erstellt wird, wenn einem Nutzer ein Foto gefällt. Jedes Mal, wenn das Foto gemocht wird, wird ein "Gefällt mir" -Schlüsselwert-Paar nach snaps 'likes node geschoben.

Ziel: ein Kinderspiel retreive und an alle untergeordneten Likes POJOs

Mein gescheiterten Versuch mit abzurufen:

 Firebase ref = new Firebase(Constants.FIREBASE_URL+"snaps/"); 
    Query queryRef = ref.orderByChild("timestamp"); 

    queryRef.addChildEventListener(new ChildEventListener() { 

     @Override 
     public void onChildAdded(DataSnapshot snapshot, String previousChild) { 

      Snap snap = snapshot.getValue(Snap.class); 
      snapsList.add(snap); 

     } 


    }); 

Daten heirachy enter image description here

Die zweiter Snap enthält nicht likes Knoten, weil es noch nicht gemocht wurde.

Snaps' POJO

public class Snap { 
private String uid=""; 
private String uname=""; 
private String timestamp=""; 
private String pname=""; 
private String place=""; 
private String image=""; 
private String desc=""; 
private String likes=""; 

public Snap() { 
} 

public Snap(String uid, String uname, String timestamp, String pname, String place, String image, String desc) { 
    this.uid = uid; 
    this.uname = uname; 
    this.timestamp = timestamp; 
    this.pname = pname; 
    this.place = place; 
    this.image = image; 
    this.desc = desc; 
} 

public String getUid() { 
    return uid; 
} 

public void setUid(String uid) { 
    this.uid = uid; 
} 

public String getUname() { 
    return uname; 
} 

public void setUname(String uname) { 
    this.uname = uname; 
} 

public String getTimestamp() { 
    return timestamp; 
} 

public void setTimestamp(String timestamp) { 
    this.timestamp = timestamp; 
} 

public String getPname() { 
    return pname; 
} 

public void setPname(String pname) { 
    this.pname = pname; 
} 

public String getPlace() { 
    return place; 
} 

public void setPlace(String place) { 
    this.place = place; 
} 

public String getImage() { 
    return image; 
} 

public void setImage(String image) { 
    this.image = image; 
} 

public String getDesc() { 
    return desc; 
} 

public void setDesc(String desc) { 
    this.desc = desc; 
} 
} 

** Daten representation- JSON **

{ 
       "snaps" : { 
       "-KDJ0yinIYo-gKpVp13w" : { 
        "desc" : "a", 
        "image" : "...", 
        "likes" : { 
        "-KDJ11Bbbc_d1S2hU2Zk" : { 
         "liked_by" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2" 
        } 
        }, 
        "place" : "a", 
        "pname" : "a", 
        "timestamp" : "1458477456134", 
        "uid" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2", 
        "uname" : "Dead Man" 
       }, 
       "-KDJ19tOlJ8-W28k5YAD" : { 
        "desc" : "b", 
        "image" : "...", 
        "place" : "b", 
        "pname" : "b", 
        "timestamp" : "1458477506628", 
        "uid" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2", 
        "uname" : "Dead Man" 
       } 
       }, 
       "users" : { 
       "b64ff43c-7b51-40d1-aac8-6e7c700113e2" : { 
        "email" : "[email protected]", 
        "full_name" : "Dead Man", 
        "image" : "...", 
        "provider" : "password" 
       } 
       } 
      } 
+0

Bitte aktualisieren Sie Ihre Frage mit einer Textversion Ihrer Firebase-Struktur anstelle eines Bildes. Sie können den Text mithilfe der Schaltfläche "Exportieren" in Ihrem Firebase-Dashboard abrufen. Durch den Text in Ihrer Frage ist sie suchbar und verhindert, dass wir sie beim Antworten erneut eingeben müssen. – Jay

+1

Ein paar Dinge: Ihr snapsknoten hat Kindknoten von/id, kein a/likes-Knoten, also die Struktur mehrere Kinder mit der Struktur:/snaps/id/likes. Die zweite Sache ist, dass beim Abrufen eines Knotens immer alle untergeordneten Elemente innerhalb des Knotens abgerufen werden. Daher ist nicht klar, was Sie fragen. Möchten Sie alle Knoten in/snaps abrufen? oder ein bestimmtes? Sie können die Antwort hier wahrscheinlich finden [Firebase Retrieving Data] (https://www.firebase.com/docs/android/guide/retrieving-data.html) oder zumindest helfen, die Frage zu verfeinern. – Jay

+0

@Jay, ich habe den JSON hinzugefügt und ja ich beabsichtige, alle Knoten innerhalb von/snaps abzurufen, aber ich kann nicht herausfinden, wie der POJO sein sollte. –

Antwort

5

definieren Likes Klasse mit der notwendigen Struktur und dann in Ihre Snaps Klasse, statt private String likes = ""; versuche privat Likes mag;

Etwas wie:

public class Snap 
    { 
     private Likes likes; 

     public Likes getLikes() 
     { 
      return likes; 
     } 

     public void setLikes (Likes likes) 
     { 
      this.likes = likes; 
     } 
    { 

und eine Klasse für jedes der Kinder mögen auch hinzufügen, das gleiche Format verwenden.