2016-03-20 10 views
0

Android Uygulamamda firebase'ten veri almak için uğraşıyordum, birden fazla çocuk düğümüne sahip olan bir düğümü nasıl alacağımı anlayamıyorum. Bir ana POJO'daki POJO'nun Arraylist'ini geri alma Firebase'den

durum

ben Firebase bir düğüme sahip bir çocuk düğüm 'sever' sahiptir 'oturana' olmasıdır. Bir kullanıcı bir fotoğraf yüklediğinde ve bir kullanıcı bir fotoğrafı beğendiğinde "beğen" düğümü oluşturulduğunda 'snaps' düğümü oluşturulur. Fotoğraf her sevildiğinde, bir "beğendi" anahtar-değer çifti snaps ' düğümüne itilir.

Amaç:

 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); 

     } 


    }); 

Veri heirachy enter image description here

: bir çırpıda ve tüm çocuk retreive için almak için POJOs

Benim başarısız girişimi kullanarak Beğeni ikinci snap içermez , henüz beğenilmediği için düğümünü beğendi.

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; 
} 
} 

** Veri 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

Lütfen sorunuzu Firebase yapınızın bir resminin yerine metin sürümüyle güncelleyin. Firebase kontrol panelinizdeki Dışa Aktar düğmesini kullanarak metni alabilirsiniz. Sorunuzdaki metne sahip olmak, onu arama yapabilmenin yanı sıra, yanıt verirken yeniden yazmamıza engel oluyor. – Jay

+1

Birkaç şey: snaps düğümünde/no'lu/düğümlü olmayan çocuk düğümleri vardır, bu yüzden yapıya sahip birden çok alt yapı:/snaps/id/likes. İkincisi, bir düğümü geri almanın her zaman, düğüm içindeki tüm çocukları alacağıdır, bu yüzden ne sorduğunuzu açıklığa kavuşturmaz;/düğümlerindeki tüm düğümleri almak ister misiniz? ya da belirli bir? Muhtemelen cevabı burada bulabilirsiniz [Firebase Data Elde Etme] (https://www.firebase.com/docs/android/guide/retrieving-data.html) ya da en azından sorunun düzeltilmesi için yardım. – Jay

+0

@Jay, json'u ekledim ve evet,/snaps içindeki tüm düğümleri almayı planlıyorum ama POJO'nun nasıl olması gerektiğini anlayamıyorum. –

cevap

5

yerine özel String 'in, gerekli yapısıyla Beğeni sınıfını tanımlamak ve sonra Snaps sınıfında temsille sever = ""; özel Likes beğenilerini dene; gibi

şey:

public class Snap 
    { 
     private Likes likes; 

     public Likes getLikes() 
     { 
      return likes; 
     } 

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

ve aynı biçimi kullanarak, hem sever çocuklarının her biri için bir sınıf ekleyin.