2016-12-14 40 views
0

我一直在將我的android應用程序的數據庫從領域切換到Firebase。 是否可以過濾數據庫引用,然後在FirebaseRecyclerAdapter中使用它?在RecyclerviewAdapter中使用過濾的數據庫引用

這裏的一些示例:

DatabaseReference adapterRef = someReference.orderByChild("country").equalTo("Test").getRef(); 
     MyAdapter adapter = new MyAdapter(this, adapterRef); 

在我的再循環器視圖中的所有數據被示出,這意味着該過濾不工作。就當我做下面的另一方面:

someReference.orderByChild("country").equalTo("test").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        Log.v(TAG, "Value"+snapshot); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
      } 
     }); 

我可以清楚地看到,過濾工作,只與國家項目等於顯示「測試」。

回答

0

你建立一個查詢,然後不理你在這裏建查詢:

DatabaseReference adapterRef = someReference 
    .orderByChild("country").equalTo("Test") // here you have a query 
    .getRef(); // here you get back the same location as someReference 

正確的咒語是通過查詢到適配器:

Query query = someReference.orderByChild("country").equalTo("Test"); 
MyAdapter adapter = new MyAdapter(this, query); 

您可能需要更改您的MyAdapter構造函數以允許Query而不是DatabaseReference獲得此編譯。

+0

嗨,弗蘭克。我正在使用'FirebaseRecyclerAdapter',它確實需要'DatabaseReference'。 – edmond

+1

我寫的也接受查詢。請參閱https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java#L127。如果您使用其他適配器作爲您的基礎,請提供一個鏈接。 –

+0

嗨,弗蘭克。很好的答案。 DatabaseReference確實是Query的一個子類。我沒有注意到這一點。 – edmond