Обновление данных слушателя FireBase (изменение пределов)
Делаю небольшую програмку для работы. При использовании firebase слушателя я получаю данные из базы в требуемых пределах дат, но при изменении этих переделов ничего не происходит. Слушатель даже не вызывается заново. Страницу не перезагружаю. Пробовал удаление слушателя после первой выборки, но видимо что-то делаю не так.
Я предполагал что это работает так :
- Ставим слушатель с границами прослушивания - Получаем результат.
- Меняем границы прослушивания - Получаем результат новых границ.
Но в реальности все работает не так. Просто кусок кода с вызовом метода прослушивания игнорируется.
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 просто игнорируется.