2017-06-08 44 views
1

我一直在使用firebase,我發現了一些奇怪的東西。 即使在我完成活動後,我在活動中註冊的價值事件偵聽器之一也會被觸發。 我已添加代碼以在'onDataChanged'方法中打開新活動,因此即使我處於不同活動中,也會打開新活動。這在應用程序中造成了很大的問題。 我知道我必須調用刪除監聽器,但我期望監聽器在活動完成後自動移除。有一種更簡單的方法,我可以刪除活動的所有值事件偵聽器嗎?提前致謝。即使在活動完成後,Firebase值事件偵聽器也會觸發嗎?

+0

Firebase數據庫偵聽器沒有上下文綁定。您需要在正確的活動生命週期事件中的代碼中明確地將其刪除,如Alex的答案中所述。 –

+1

有沒有辦法將它附加到上下文中?我不想手動去做,因爲每個活動都有很多聽衆。 –

+0

請參閱我更新的答案。 –

回答

3

您需要在離開主要活動後刪除監聽器。爲了做到這一點,你可以創建一個方法是這樣的:根據不僅僅是打電話removeValueEventListener(hashMap);

hashMap.put(yourRef, eventListener); 

private HashMap<DatabaseReference, ValueEventListener> hashMap = new HashMap<>(); 
public static void removeValueEventListener(HashMap<DatabaseReference, ValueEventListener> hashMap) { 
    for (Map.Entry<DatabaseReference, ValueEventListener> entry : hashMap.entrySet()) { 
     DatabaseReference databaseReference = entry.getKey(); 
     ValueEventListener valueEventListener = entry.getValue(); 
     databaseReference.removeEventListener(valueEventListener); 
    } 
} 

要刪除一個利斯特每一次,你可以使用此行代碼到活動的生命週期。您可以在您的onPause()onStop()方法中添加此行。通過這種方式您可以立即刪除所有聽衆

希望它有幫助。

+2

嘿謝謝你的回答,但我已經知道了。我想知道是否有其他方法可以同時刪除所有聽衆?因爲手動做這件事需要很長時間。 –

+0

是的,其實有。請看我更新的答案。 –

相關問題