【发布时间】:2015-09-07 19:12:21
【问题描述】:
当特定字段的值为 true 时,我想从 firebase ref 中删除 addValueEventListener 侦听器。
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
}
});
但是 addValueEventListener 没有被删除,它被调用用于那个 firebase ref 。因此,如果需要,请建议我如何从任何 firebase ref 中删除侦听器。
【问题讨论】:
-
您的
valueListener始终是null -
您可以使用
if (title) { fb.removeEventListener(this); }从回调中删除监听器。无关:这段代码的大多数读者会认为title是一个字符串。您可能希望使用更直观的变量名称来解释为布尔值,例如isFinished. -
valueListener 在添加监听器时有一个引用@talex
标签: java firebase firebase-realtime-database