2017-08-30 75 views
1

我正在使用ValueEventListeners从Firebase数据库检索数据。现在我想从查询中删除一个ValueEventListener。事情是这样的:android:如何获取当前的ValueEventListener附加到查询?

query.removeEventListener(listener); 

在获得例外的情况下,我要检查,如果听众已经添加到查询之前,我确实将其删除。但是,我只是无法找到如何检查查询“有”监听器;我也无法获得附加到查询的当前侦听器。是否有可能做到这一点?

回答

2

是的。你需要使用下面的代码:

if(listener != null) { 
    query.removeEventListener(listener); 
} 

如果你的听众不等于空,意味着已经连接,你需要将其删除,否则你不要酬劳做任何事情。

请注意,您需要根据活动的生命周期来移除侦听器。

根据Query class offical documentation,没有获取查询侦听器的方法。一旦你添加了监听器,你只需要删除它。您无法检查作为参数传递的侦听器的状态。

+0

你错了。您可以创建一个侦听器(不为空),但未附加。问题是:有没有办法知道查询是否有听众连接? –

+0

@RazvanCristianLung在我的理解中,如果某人正在使用'query.removeEventListener(listener);'意味着该监听器是第一次创建并附加的。因此,如果侦听器被附加到该特定查询中,则必须将其删除。验证这是检查无效的唯一方法。 –

+0

同意,用户必须手动将侦听器设置为空,如文档告诉我们的。但是,OP的问题仍然不同。 –

1

您无法获取您添加的侦听器的列表,因此您需要跟踪它们,但可以安全地调用query.removeEventListener(侦听器)。如果给定的监听者没有连接,则不会发生任何事情。

请记住,认为您需要手动删除所有连接到DatabaseReference的侦听器,否则它们会触发。

相关问题