2017-07-04 1 views
0

zeigen Ich möchte FirebaseRecyclerAdapter überprüfen, ob dort mit E-Mail-Adresse endet und Uids anzeigen. Irgendwie gibt es alle Daten aus, als ob es keine Filterung und Ordnung gäbe.FirebaseRecyclerAdapter zeigt immer noch alle Elemente an. Sollte keine

Hier ist JSON Daten.

"invites" : { 
    "4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%[email protected]%2Etest" : { 
    "cost" : "2", 
    }, 
    "[email protected]%2Etest" : { 
    "costs" : "0" 
    }, 
    "UQW5VEAojMOyB2WGTU9aTPUBepg1_test6%[email protected]%2Etest" : { 
    "costs" : "0"  
    } 
} 

Ich möchte FirebaseRecyclerAdapter setzen. Hier ist Adapter.

mAdapter = new FirebaseRecyclerAdapter<Event, UserHolder>(
     Event.class, 
     R.layout.layout, 
     UserHolder.class, 
     ref.child("invites").orderByKey().endAt(encodeAsFirebaseKey(email)) 
) {} 

Warum bekomme ich alle drei Elemente, wenn ich mit [email protected] E-Mail testen? Es scheint, dass ich Dokumentation gelesen habe und es sollte funktionieren. Irgendwelche Ideen?

Aktualisieren.

private String encodeAsFirebaseKey(String string) { 
    return string.replace(".", "%2E"); 
} 

Es gibt Test @ test% 2Etest zurück.

 protected void populateViewHolder(final UserHolder viewHolder, Event model, final int position) { 
    final String key = this.getRef(position).getKey().split("_")[0]; 
      viewHolder.setName(key);  
      } 
+0

Das hängt von dem Wert ab, den 'encodeAsFirebaseKey (email)' zurückgibt. Können Sie das Problem mit einem fest codierten Wert anstelle dieses Aufrufs reproduzieren? –

+0

Es gibt test @ test% 2Etest zurück. Sollte arbeiten. – EagerToSing

Antwort

0

Sie scheint zu verwirren, wie endAt() funktioniert. Es entspricht allen Zeichenfolgen und endet mit der Zeichenfolge, die mit dem übergebenen Argument beginnt. Es tut nicht übereinstimmen Zeichenfolgen mit dem Argument, das Sie übergeben.

So endAt("[email protected]%2Etest") Spiele:

"4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%[email protected]%2Etest" : { 
    "cost" : "2", 
}, 
"[email protected]%2Etest" : { 
    "costs" : "0" 
}, 

Aber endAt("[email protected]%2Etest") kehrt nichts, weil keine Taste beginnt damit.

+0

Es scheint, dass die Datenstruktur geändert werden sollte, um nach Kind filtern zu können. Dies liegt daran, dass E-Mail doppelt als Teil von Schlüssel und als Kind verwendet wird. – EagerToSing

Verwandte Themen