这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ValueEventListener userNavListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.v(Tag, "Called Multiple Times");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mDatabase.addValueEventListener(userNavListener);
}
我想要的是什么:
- 在背景上应用 addValueEventListener 的单个实例
- 因此,我不想要使用 onDestroy()方法
如果我执行此操作,问题是 Log.v 多次打印数据只会改变一次:
- 我打开申请表,
- 我再次关闭申请,
- 我再次打开申请,
- 然后出现问题, onDataChange 日志打印三次。
有什么办法可以防止这种情况发生吗?
感谢您抽出时间阅读此问题,如果您知道答案,请回答我的问题。
答案 0 :(得分:2)
您必须在不再需要时删除eventListeners。
安全的地方是onDestroy()
@Override
public void onDestory() {
if (mDatabase!= null && userNavListener!= null) {
mDatabase.removeEventListener(userNavListener);
}
}
答案 1 :(得分:0)
如果您只想听一次,请使用addListenerForSingleValueEvent
代替ValueEventListener
addListenerForSingleValueEvent
只读取一次数据。所以你可以像这样使用它:
mDatabase.addListenerForSingleValueEvent(userNavListener)