2017-08-30 74 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的偵聽器,否則它們會觸發。