【发布时间】:2019-10-06 10:17:22
【问题描述】:
不是每次,但有时(我觉得是 10%)onChildChanged() 方法会被调用 3 次,尽管我实际上更改了两次。
这里是日志。
这是我两次更改值时的日志。 (真→假→真,※原值为真)
05-20 12:39:14.948 3960-3960/com.yoji0806.wastekiller1 I/childChanged: check: false, tablet: 1
05-20 12:39:14.948 3960-3960/com.yoji0806.wastekiller1 I/childChanged: check: true, tablet: 1
05-20 12:39:16.276 3960-3960/com.yoji0806.wastekiller1 I/printReceipt: table: TN 18
这是 onChildChanged() 被调用 3 次时的日志,尽管我只更改了两次值。 (真→假→真,※原值为真)
05-20 12:39:40.818 3960-3960/com.yoji0806.wastekiller1 I/childChanged: check: true, tablet: 1
05-20 12:39:40.820 3960-3960/com.yoji0806.wastekiller1 I/childChanged: check: false, tablet: 1
05-20 12:39:40.822 3960-3960/com.yoji0806.wastekiller1 I/childChanged: check: true, tablet: 1
05-20 12:39:41.670 3960-3960/com.yoji0806.wastekiller1 I/printReceipt:table: TN 18
05-20 12:39:46.376 3960-3960/com.yoji0806.wastekiller1 I/printReceiot:table: TN 18
我不知道上面第一行日志发生了什么。虽然原始值为真,但它捕捉到了从“真”到“真”的变化。
这是我的代码。
private val listener = object : ChildEventListener{
override fun onChildRemoved(p0: DataSnapshot) {}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {}
override fun onCancelled(p0: DatabaseError) {}
override fun onChildAdded(p0: DataSnapshot, p1: String?){
val check: Boolean = p0.child("check").value.toString().toBoolean()
val tablet = p0.child("tablet").value.toString()
Log.i("childAdded:" , "check: $check, tablet: $tablet")
if (check){
val tableNum = p0.key.toString()
readData(tableNum, tablet)
}
}
override fun onChildChanged(p0: DataSnapshot, p1: String?) {
val check: Boolean = p0.child("check").value.toString().toBoolean()
val tablet = p0.child("tablet").value.toString()
Log.i("childChanged:", "check: $check, tablet: $tablet")
if (check){
val tableNum = p0.key.toString()
readData(tableNum, tablet)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_receive)
val mDatabase = FirebaseDatabase.getInstance()
mDatabase.getReference("Checker").addChildEventListener(listener)
}
添加
·在我获取上面这两个日志之前,我已经附加了监听器,并且日志时间戳显示我在获取第一个日志后不久就获取了第二个日志。在两次行动之间(采取了 2 个日志)我没有采取任何行动。
・我使用两种类型的平板电脑。一种用于写入 DB,另一种用于侦听 DB 上的更改。问题出现在 2 型平板电脑中。
【问题讨论】:
标签: android database firebase firebase-realtime-database kotlin