Я боролся с этим более половины дня и в конце концов решил поставить здесь свой вопрос.
Я использую базу данных Firebase в реальном времени для разработки приложения Android. Я включил автономное разрешение.
Я создаю новый объект ValueEventListener с методом onDataChange, как показано ниже:
changeListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...}};
dbRef.addValueEventListener(changeListener);
Через другой фрагмент в приложении я удалить элемент, на который указывает dbRef. Предположим, изначально у меня было десять элементов в dbRef. Если я поставлю точку останова в коде onDataChange, я увижу, что он вызывается три раза подряд. В первый раз dataSnapShot содержит девять элементов. Во второй раз в нем десять элементов (включая только что удаленный), и, наконец, в третий раз в нем снова девять элементов.
Обратите внимание, если я отключаю офлайн настойчивость, эта проблема не произойдет. Этого не произойдет, если я вручную удалю элемент из консула базы данных. В обоих случаях onDataChange вызывается только один раз.
Я также правильно добавляю слушатель в метод onResume в своем фрагменте и удаляю его в моей паузе.
Мои вопросы:
- Это ожидаемое поведение?
- Если да, то почему это происходит?
- Есть ли способ избежать три звонка на onDataChange?
Заранее большое спасибо