【发布时间】:2022-12-03 14:41:16
【问题描述】:
因此,只要 RealtimeDatabase 发生变化,ValueEventListener 就会不断更改应用程序的数据。
我想创建一个按钮来阻止 ValueEventListener 使用新数据不断更新应用程序。怎么做?谢谢。
【问题讨论】:
标签: android firebase kotlin firebase-realtime-database
因此,只要 RealtimeDatabase 发生变化,ValueEventListener 就会不断更改应用程序的数据。
我想创建一个按钮来阻止 ValueEventListener 使用新数据不断更新应用程序。怎么做?谢谢。
【问题讨论】:
标签: android firebase kotlin firebase-realtime-database
因此,只要 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 { ... }。试一试,告诉我它是否有效。
object: ValueEventListener { ... } 分配给一个变量,例如:ref.ValueEventListener( var deleteThisLater = object: ValueEventListener { ... }) 所以我可以在 ref.removeEventListener(deleteThisLater) 中使用它,但它似乎不能这样分配。如何将object: ValueEventListener { ... } 分配给变量?谢谢