【问题标题】:Is there a way to stop RealtimeDatabase's ValueEventListener from reading new data changes?有没有办法阻止 RealtimeDatabase 的 ValueEventListener 读取新的数据更改?
【发布时间】:2022-12-03 14:41:16
【问题描述】:

因此,只要 RealtimeDatabase 发生变化,ValueEventListener 就会不断更改应用程序的数据。

我想创建一个按钮来阻止 ValueEventListener 使用新数据不断更新应用程序。怎么做?谢谢。

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    因此,只要 RealtimeDatabase 发生变化,ValueEventListener 就会不断更改应用程序的数据。

    对,那是正确的。这就是实时监听器所做的。

    我想创建一个按钮来阻止 ValueEventListener 使用新数据不断更新应用程序。怎么做?

    在添加侦听器的同时,您可以将其删除。所以在代码中,它应该是这样的:

    stopListenerButton.setOnClickListener {
        databaseReference.removeEventListener(valueEventListener);
    }
    

    还有另一种方法,您实际上不需要删除侦听器。如果需要,您可以使用Query#addListenerForSingleValueEvent(@NonNull ValueEventListener listener)

    在此位置为数据的单个更改添加一个侦听器。该侦听器将使用该位置的数据值触发一次。

    编辑:

    这是使用匿名对象创建侦听器的方式:

    val listener = object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            TODO("Not yet implemented")
        }
    
        override fun onCancelled(error: DatabaseError) {
            TODO("Not yet implemented") //Never ignore potential errors!
        }
    }
    

    这是您附加侦听器的方式:

    yourRef.addValueEventListener(listener)
    

    这就是您删除侦听器的方式:

    yourRef.removeEventListener(listener)
    

    【讨论】:

    • 嗨亚历克斯,感谢您的回答,valueEventListener 的价值是多少?是databaseReference.ValueEventListener(object: ValueEventLister { })吗?
    • 不,只有匿名对象object: ValueEventLister { ... }。试一试,告诉我它是否有效。
    • 嘿,汤米。我的回答有帮助吗?我可以帮助您了解其他信息吗?
    • 嗨 Alex,我仍在尝试将所有 object: ValueEventListener { ... } 分配给一个变量,例如:ref.ValueEventListener( var deleteThisLater = object: ValueEventListener { ... }) 所以我可以在 ref.removeEventListener(deleteThisLater) 中使用它,但它似乎不能这样分配。如何将object: ValueEventListener { ... } 分配给变量?谢谢
    • 请检查我更新的答案。试一试,告诉我它是否有效。
    猜你喜欢
    • 2017-03-09
    • 2012-04-13
    • 2021-12-31
    • 2011-01-18
    • 2010-12-09
    • 2019-10-20
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多