2016-09-23 182 views
2

我創建了一個ListView,它應該顯示存在的Firebase用戶的所有用戶名。但現在我得到了問題,我不知道如何獲得用戶ID的孩子。當然,我可以用數據庫中的ID創建一個數組,但如果有更多的人在應用程序中註冊,它不會自動執行。那麼你知道如何讓所有的孩子從小孩那裏?它看起來像這樣Firebase獲取子女孩的子女

Root 
    iadf09f08asd0fasd 
     Infos 
     Username: LeagueHans 
    i297f9pb2f92 
     Infos 
     Username: Julian 
    08bfbüqw0efü 
     Infos 
     Username: Markus 

從評論:

DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
root.child("Users")‌​.child(What to write here).child("Infos").child("Username"); 

我不知道如何獲得用戶ID(iadf09f08asd0fasd)作爲孩子。

+0

'你正在創建的'Root'節點還是'fir-xxxxxx'的東西? –

+0

DatabaseReference root = FirebaseDatabase.getInstance()。getReference()。child(「Users」)。child(在這裏寫什麼).child(「Infos」)。child(「Username」); 我不知道如何得到用戶標識(iadf09f08asd0fasd)作爲孩子 –

回答

0

嘗試像這樣...

的火力addValueEventListener將在每次只要你的數據庫得到改變,以便用它來檢索數據的時間得到觸發。

mReference.child("Root").child("Infos").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) { 

       YourModel mModel = eventSnapshot.getValue(YourModel.class); 
       Log.e("NAME " ,""+ mModel); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

請解釋這對於未來的新手是否知道這會做什麼 –

+0

在開始使用Firebase之前,如果您要使用Firebase,那麼您應該知道所有它的方法和查詢..閱讀文檔工作,沒有你永遠不會知道它是如何工作的。 –

+0

但新手不會確切知道你在做什麼。你不能只給代碼,如果你說的是正確的,那麼每個答案應該是代碼而不管標籤,因爲在你的情況下「他應該知道它的方法和查詢」,這顯然是不正確的。 –

2

當您在位置上運行查詢時,您將立即得到該位置下的節點子集。你不能在那之下檢索低級別的孩子。

因此,要麼您將不得不檢索所有數據,然後只處理用戶名客戶端或(最好)您需要更改您的數據模型以更好地適合您的用例。

僅使用用戶名

root.child("Users")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.child("Infos/Username).getValue(String.class); 
    } 
    ... 

這是可行的,但是不僅僅意味着你需要,你獲取更多的數據。這是Firebase建議您不要嵌套數據的許多原因之一,除非您始終需要將它們組合在一起。

另一種方法是:

使用符合您的用例的數據模型

我經常建議,在火力地堡您的應用程序的屏幕模型。所以,如果你想顯示在您的應用程序的用戶名列表,你應該在你的數據庫用戶名的列表:

Usernames 
    iadf09f08asd0fasd: "LeagueHans" 
    i297f9pb2f92: "Julian" 
    08bfbüqw0efü: "Markus" 

現在你可以只用用戶名:

root.child("Usernamess")‌​.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     String username = snapshot.getValue(String.class); 
    } 
    ... 
+0

哇謝謝你! 但是你知道,如果我可以在FirebaseListAdapter第一種方法顯示的用戶名?由於它的字符串:/ –

+0

它會一直,如果你想共享你在這種情況下,適配器的幫助。 : - /但是,是的,你可以覆蓋'parseSnapshot()'和剛剛返回用戶名存在 - 類似(雖然不完全相同),給我在這裏所做的:http://stackoverflow.com/a/34561726/209103 。 –