2017-02-13 65 views
0

我很難弄清楚如何查詢我的Firebase數據庫。這是它的樣子。Android的Firebase訂單通過

Firebase Database

這裏是我的代碼:

//RETRIEVE 
    public ArrayList<Spacecraft> retrieve() 
    { 

     String myUserId = acct.getId(); 

     //db.addChildEventListener(new ChildEventListener() { 
     db.child("https://stackoverflow.com/users/uid").equals(myUserId) 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       //fetchData(dataSnapshot); 
       fetchData(dataSnapshot); 
       adapter.notifyDataSetChanged(); 
      } 
      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
       fetchData(dataSnapshot); 
       adapter.notifyDataSetChanged(); 
      } 
      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 
      } 
      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
     return spacecrafts; 
    } 

所以db.addChildEventListener將檢索整個數據庫。但是我想要的只是爲uid等於String myUserId的用戶檢索數據。我想按Level升序排列。我已閱讀文檔並觀看了視頻,但我無法弄清楚。任何幫助,將不勝感激。

+1

您是否嘗試過使用OrderBy子項,然後將其過濾出來,如文檔中提到的 https://firebase.google.com/docs/reference/js/firebase.database.Query –

+0

嗨。感謝您的答覆。是的,我查看了該文檔。文檔的問題是它們沒有顯示恐龍數據庫的結構。如果我發佈了關於我在數據庫中遇到的問題的問題,但沒有顯示結構,有人會要求我展示結構。我不知道如何通過看起來像兄弟姐妹的級別來獲得具有特定用戶和訂單的用戶參考。我有一個SQL背景,不瞭解NoSQL。 –

回答

2
Query query = db.child("users").orderByChild("uid").equalTo("myUserId"); 
query.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     for (DataSnapshot userSnapshot: snapshot.getChildren()) { 
      System.out.println("User "+userSnapshot.child("uid").getValue()); 
     } 
    } 
    ... 

但是,如果你經常UID訪問數據,你就要去重組你的數據庫,所有用戶存儲在自己的UID:

users 
    myUserId 
    Level: 2 
    NumCorrect: 8 

您可以再與讀取數據:

db.child("users/myUserId").addValueEventListener(new ValueEventListener() { 
    public void onDataChange(DataSnapshot snapshot) { 
     fetchData(dataSnapshot); 
    } 

有關Firebase查詢的更多信息,請參閱Firebase documentation on sorting and filtering data。由於您是NoSQL的新手,因此我推薦您閱讀NoSQL data modeling並查看Firebase for SQL developers

+0

謝謝弗蘭克。我可以從你的查詢中看到如何選擇一個特定的uid。但是它能確保結果按照Level升序排列嗎? –

+0

Firebase查詢只能對一個屬性進行排序/過濾。查看http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –

+0

好的,也許我可以將快照結果加載到列表中,然後對列表進行排序。然後將該列表發送到ListView的自定義適配器。對於Android來說是新鮮事物我是一名C#SQL Server開發人員。如果Android使用C#而不是Java,這會更容易。 –