2015-01-20 4 views
1

데이터 캐싱에 RoboSpice + OrmLite를 사용할 계획이며 앱을 오프라인으로 작업하고 캐시 된 데이터를 사용하고 싶습니다. RoboSpice를 처음 사용했습니다.Android RoboSpice 캐시 관리 및 오프라인 모드

다음과 같은 경우를 구현하고 싶습니다. 사용자가 인터넷에 연결되어 있지 않으면 데이터가 필요할 때마다 서버에서 데이터를 요청할 때마다 (변경 가능) 데이터를 가져와야합니다. db로부터 만료되지 않습니다. 내가 바로 이해한다면

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

DurationInMillis.ALWAYS_RETURNED 데이터가 한 번로드되고 다른 시간은 캐시에서로드 것을 의미한다. 설명 된 시나리오를 구현할 수있는 옵션이 있다면?

NetworkStateChecker과 비슷한 것을 볼 수 있으며 SpiceService에서 재정의 할 수 있습니다. 어쩌면 그것은 올바른 방향 일 것입니다.

답변

2

SpiceManager#getFromCacheAndLoadFromNetworkIfExpired을 사용해보세요. javadoc에서 :

캐시에서 데이터를 가져 오거나 만료되었거나 만료되었으며 normaly 요청을 실행합니다. SpiceRequest.loadDataFromNetwork() 메서드를 호출하기 전에 캐시가 검사됩니다. 결과가 캐시 키 requestCacheKey으로 캐시 된 경우 RoboSpice는 cacheExpiryDuration 매개 변수를 고려하여 캐시의 결과가 만료되었는지 여부를 확인합니다. 만료되지 않으면 청취자는 데이터를 캐시에서만 수신합니다. 결과가 없거나 만료 된 경우 SpiceRequest.loadDataFromNetwork()이 호출되고 결과는 캐시 키 requestCacheKey을 사용하여 캐시에 저장됩니다.

완전히 설명하지는 않지만 캐시가 만료되면 결과가 나타납니다. 그런 다음 DurationInMillis.ALWAYS_EXPIRED을 사용한 경우 매번 캐시가 네트워크에서 새로 고쳐집니다. 따라서 추가 요청으로 만 네트워크에서 최신 데이터를 가져올 수 있습니다.

SpiceManager#getDataFromCache을 사용하여 캐시에서 데이터를로드하려면 RequestListener#onRequestFailure을 구현하는 것이 좋습니다. 이 경우에는 사용자 정의 com.octo.android.robospice.retry.RetryPolicy을 구현하는 것이 좋습니다.

마지막으로, NetworkStateChecker은 인터넷 연결이 실제로 작동 하는지를 아는 정도까지 신뢰할 수 없으므로 두 경우 모두 최상의 방법은 데이터가 필요할 때마다 요청을 실행 해 보는 것입니다.