Обновление данных слушателя FireBase (изменение пределов)

Делаю небольшую програмку для работы. При использовании firebase слушателя я получаю данные из базы в требуемых пределах дат, но при изменении этих переделов ничего не происходит. Слушатель даже не вызывается заново. Страницу не перезагружаю. Пробовал удаление слушателя после первой выборки, но видимо что-то делаю не так.

Я предполагал что это работает так :

  1. Ставим слушатель с границами прослушивания - Получаем результат.
  2. Меняем границы прослушивания - Получаем результат новых границ.

Но в реальности все работает не так. Просто кусок кода с вызовом метода прослушивания игнорируется.

orderHistoryRef = FirebaseDatabase.getInstance().getReference()
            .child("Order List").child(userKey);

show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(valueEventListener != null) orderHistoryRef.orderByKey().startAt(date1).endAt(date2).removeEventListener(valueEventListener);

            if (dateStart != null || dateEnd != null) {
                GetInfoUser(dateStart, dateEnd);
            } else {
                start.setText(date1);
                end.setText(date2);
                GetInfoUser(date1, date2);
            }

            Log.d(TAG, "dateStart - " + dateStart + ", dateEnd - " + dateEnd);

        }
    });

private void GetInfoUser(String date1, String date2) {
    valueEventListener = new ValueEventListener() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    for (DataSnapshot ds2 : ds.getChildren()) {
                        Map<String, Object> map = (Map<String, Object>) ds2.getValue();
                        Object a = map.get("point");
                        Object b = map.get("delivery");
                        int oPoint = Integer.parseInt(String.valueOf(a));
                        int dPoint = Integer.parseInt(String.valueOf(b));
                        piePointers += oPoint;
                        pieDelivery += dPoint;
                    }
                }
                pieResult = pieDelivery + piePointers;
                txt1.setText(piePointers + " - ");
                txt2.setText(pieDelivery + " - ");
                txt3.setText(pieResult + "");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };

    orderHistoryRef.orderByKey().startAt(date1).endAt(date2).addListenerForSingleValueEvent(valueEventListener);
    Log.d(TAG, ""+piePointers);
    Log.d(TAG, "date1 - " + date1 + ", date2 - " + date2);
    piePointers = 0;
    pieDelivery = 0;
    pieResult = 0;
}

При первом нажатии на кнопку show должен вызваться слушатель с дефолтными пределами, при выборе произвольных пределов вызов фунеции GetInfoUser просто игнорируется.


Ответы (0 шт):