Мне нужно что бы приложение читало только новые данные, а остальные(ранее скачанные) хранило оффлайн и не скачивало заново.
Из этого поста я понял что для этого нужно использовать SnapshotListener вместо get. И да я проверил, get если есть подключение к сети качает данные с сервера, а SnapshotListener берет оффлайн, но не всегда. Я не могу понять причин, но иногда данные берутся с сервера(на сервере данные не изменялись). В некоторых активностях данные всегда берутся с сервера, а в некоторых при запуске приложения - данные берутся локально, но при перезапуске активности они уже берутся с сервера.
Также я попробовал поставить два абсолютно одинаковых запроса рядом, то есть если один загрузится онлайн, то второй должен по логике брать уже локально, но нет, оба берутся с сервера.
Код
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("collection")
.whereEqualTo("language", Locale.getDefault().getLanguage());
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "Listen failed.", e);
return;
}
if(value != null && !value.isEmpty()){
// some code.
}
String source = value.getMetadata().isFromCache()? "local cache" : "server";
Log.d("DATAFROM", source);//тут можно понять откуда данные.
}
});
PS: без whereEqualTo тоже не работает.
Что интересно, если отключить интернет, то все данные есть оффлайн и нормально загружаются...
Зачем это исправлять- потому что оплата берется за чтение, и какой смысл читать и платить за уже прочитанные данные!!?
Как это исправить?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
у меня проблема с csrf и SpringSecurityКогда я посылаю форму я получаю статус 302