Это не каждый раз, но иногда (я чувствую, что это 10%) метод onChildChanged () вызывается 3 раза, хотя я на самом деле менялся дважды.
Вот журналы.
Это журнал, когда я меняю значение дважды.(true → false → true, value исходное значение было истинным)
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 раза, хотя я изменил значение только дважды.(true → false → true, value исходное значение было истинным)
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 журнала) я не сделал никаких действий.
・ Я использую таблетки двух типов.Один для записи в БД, другой для прослушивания изменений в БД.Проблема возникает в планшете типа 2.