removeEventListener entfernen Zuhörer in Feuerstellung
Möchte ich entfernen addValueEventListener Hörer aus einer Feuerstellung ref, wenn der Wert des bestimmten Feldes true ist.
ValueEventListener valueListener=null;
private void removeListener(Firebase fb){
if(valueListener!=null){
**fb.removeEventListener(valueListener);**
}
}
String key="https://boiling-heat-3083.firebaseio.com/baseNodeAttempt/" + userId+"/"+nodeType+"/"+nodeId+"/data";
final Firebase fb = new Firebase(key);
valueListener=fb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snap) {
final HashMap<String, Object> data=(HashMap<String, Object>) snap.getValue();
if( data.get("attemptFinish_"+nodeId)!=null){
boolean title = (boolean) snap.child("attemptFinish_"+nodeId).getValue();
if(title){
removeListener(fb);
}
}
}
@Override
public void onCancelled() {
//TODO Auto-generated method stub
}
});
Aber addValueEventListener ist nicht immer entfernt, und es ist gefordert, dass FB ref . Also bitte, schlagen Sie mich, wie zu entfernen Zuhörer von jeder FB ref, wenn erforderlich.
- Ihre
valueListener
ist immernull
- Sie können entfernen Sie den Hörer innerhalb der callback mit
if (title) { fb.removeEventListener(this); }
. Unrelated: die meisten Leser dieser code wird davon ausgegangen, dasstitle
ist ein String. Sie möchten möglicherweise verwenden Sie einen Variablennamen, der ein bisschen mehr intuitiv zu interpretieren als boolean, z.B.isFinished
. - valueListener hat eine Referenz, wenn listener Hinzugefügt, @talex
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie den Hörer innerhalb der callback mit:
So dass eine vollständige fragment:
Entfernte ich die
HashMap
, anstatt über die Methoden derDataSnapshot
zu den selben Zweck erfüllen. Ich auch umbenannt, ein paar Variablen klarer zu werden/mehr idiomatisch.isFinished ever
wahr"?Stellen Sie sicher, dass Sie hinzufügen und entfernen Sie die Zuhörer auf den gleichen Knoten auf Ihrem DatabaseReference. Zum Beispiel:
Ist der listener ist in diesem Fall verweist path_2.
Wenn Sie versuchen, entfernen Sie Ihre Zuhörer mit diesem code
funktioniert es nicht, weil Sie versuchen, entfernen Sie die Zuhörer von der falschen Knoten. Der korrekte Weg wäre
Ich hoffe, dies wird Ihnen helfen... nur Sie können diese Methode verwenden, ist es Arbeit für mich...
Schreiben von onCreate()
Schreiben von onDestroy()
Zuhörer
}