2016-12-14 3 views
0

Ich habe die Datenbank meiner Android App von Realm zu Firebase gewechselt. Ist es möglich, eine Datenbankreferenz zu filtern und sie dann innerhalb des FirebaseRecyclerAdapter zu verwenden?Verwenden Sie gefilterte Datenbankreferenz in RecyclerviewAdapter

Hier einige Beispiel:

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

Innerhalb meiner Recycler Ansicht werden alle Daten angezeigt, was bedeutet, dass die Filterung nicht funktioniert. Auf der anderen Seite, wenn ich wie folgt vorgehen:

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

Ich kann deutlich sehen, dass die Filterung funktioniert und nur Produkte mit Land gleich zu „Test“ angezeigt werden.

Antwort

0

Sie bauen eine Abfrage, die Abfrage dann ignorieren Sie hier gebaut:

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

Die richtige Beschwörung ist die Abfrage in an den Adapter weitergeben müssen:

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

Sie könnten brauchen Ändern Sie Ihren MyAdapter Konstruktor, um eine Query anstelle von DatabaseReference zu ermöglichen, dies zu kompilieren.

+0

Hallo Frank. Ich verwende den 'FirebaseRecyclerAdapter' und es erwartet eine' DatabaseReference'. – edmond

+1

Die eine, die ich geschrieben habe, akzeptiert auch eine Abfrage. Siehe https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java#L127. Wenn Sie einen anderen Adapter als Basis verwenden, geben Sie bitte einen Link dazu an. –

+0

Hallo Frank. Gute Antwort. DatabaseReference ist in der Tat eine Unterklasse von Query. Das habe ich gar nicht bemerkt. – edmond