Firebase onChildChanged () вызывается 3 раза, хотя я дважды менял значение - PullRequest
0 голосов
/ 20 мая 2019

Это не каждый раз, но иногда (я чувствую, что это 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.

1 Ответ

0 голосов
/ 20 мая 2019

это тривиально. любой слушатель изменения состояния будет называться

количество выполненных изменений + ВПЕРВЫЕ СЛУШАЛИ СЛУШАТЕЛЬ

.

Это означает, что ваш ребенок сменил слушателя, когда вас в первый раз вызывали, когда вы его прикрепили. Затем он был вызван во второй раз, когда вы внесли изменения. Затем в третий раз вы сделали последнее изменение. Итого = 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...