Управление кешем Android RoboSpice и автономный режим

Я планирую использовать RoboSpice + OrmLite для кэширования данных и хочу, чтобы мое приложение работало в автономном режиме и использовало кэшированные данные. Я новичок в RoboSpice.

Я хочу реализовать следующий случай: если у пользователя есть подключение к Интернету, данные каждый раз запрашиваются с сервера (потому что его можно изменить) и кэшируются в БД, если у пользователя нет данных о подключении к Интернету, они должны быть взяты из БД и никогда не истечет.

getSpiceManager().execute(weatherRequest, new Integer(0), DurationInMillis.ALWAYS_RETURNED, new WeatherRequestListener());

Если я правильно понимаю, DurationInMillis.ALWAYS_RETURNED означает, что данные будут загружены один раз, а другой раз загружены из кеша. Есть ли варианты реализации описанного сценария?

Я вижу что-то вроде NetworkStateChecker, и это можно переопределить в SpiceService. Возможно, это правильное направление.


person Liza Tjaica    schedule 20.01.2015    source источник


Ответы (1)


Вы можете попробовать использовать SpiceManager#getFromCacheAndLoadFromNetworkIfExpired. Из javadoc:

Получает данные из кеша, просроченные или нет, и выполняет запрос в обычном режиме. Перед вызовом метода SpiceRequest.loadDataFromNetwork() кеш будет проверен: если результат был закэширован с ключом кеша requestCacheKey, RoboSpice будет учитывать параметр cacheExpiryDuration, чтобы определить, просрочен ли результат в кеше или нет. Если срок его действия не истек, то слушатели будут получать данные только в кеше. Если результат отсутствует или просрочен, то будет вызван SpiceRequest.loadDataFromNetwork(), и результат будет сохранен в кэше с использованием ключа кэша requestCacheKey.

Это не объясняет это полностью, но когда кеш истечет, вы все равно получите оттуда результат. Затем, если вы использовали DurationInMillis.ALWAYS_EXPIRED, кеш будет каждый раз обновляться из сети. Таким образом, вы сможете получить свежие данные из сети только в дополнительном запросе.

Другим подходом для вас было бы реализовать RequestListener#onRequestFailure для загрузки данных из кеша с использованием SpiceManager#getDataFromCache. Обратите внимание, что в этом случае вы, вероятно, захотите реализовать собственный com.octo.android.robospice.retry.RetryPolicy.

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

person nekojsi    schedule 21.01.2015