Firebase安卓。如果我多次添加相同的侦听器怎么办?

时间:2017-09-22 10:53:57

标签: java android firebase

如果我添加相同的侦听器对象

private ValueEventListener dataChangedListener = new ValueEventListener() ...

        mQery.addValueEventListener(dataChangedListener);
        mQery.addValueEventListener(dataChangedListener);

就像我添加一次一样?如果我想删除它,我应该致电

        mQery.removeEventListener(dataChangedListener);

或不?

2 个答案:

答案 0 :(得分:1)

不,它不会是一样的。如果您有多个引用都指向Firebase数据库中的完全相同的位置,并且您有所有这些引用的侦听器,那么对该位置的数据的任何更改都将触发所有侦听器。

如果您不希望侦听器触发更改,请将其从首先添加它的引用中删除。据我所知,没有办法有条件地指出应该根据其他条件触发一个监听器 - 你只需添加和删除它们。

答案 1 :(得分:1)

您可以通过简单地更新数据库中的某些数据并观察 onDataChanged removeEventListener 是否有效。是否被调用。

关于它是否与添加一次相同:我有同样的问题,所以我检查了Firebase sources。据我所知(我不是这方面的专家),Firebase会在Listener列表中添加一个新对象,但它指向之前添加的同一个侦听器。

您可以自己查看sources进行详细检查。

编辑:为了澄清,我将添加一些截图...

如果我两次注册同一个子监听器会发生这种情况。 onChildAdded被调用两次并使用Milk 2x填充列表。

This is what happens if I register the same child listener twice