我有一個SpiceRequest,它的任務是預先緩存一堆數據,然後可以單獨加載到單獨的SpiceRequests中。例如,假設我的應用程序通過SpiceRequest爲特定劇院下載電影時間,我需要一個複合SpiceRequest,用於下載並預緩存區域中所有劇院的所有電影時間。Robospice:從SpiceRequest保存到緩存
讓我們調用這個AllMoviesSpiceRequest,它是SpringAndroidSpiceRequest的一個子類。它的loadDataFromNetwork()方法對getRestTemplate()。getForObject()進行了幾次調用。它將所有數據放入一個包含對象並返回它。
我的計劃是調用onRequestSuccess來爲每個影院調用SpiceManager.putInCache。問題是,所有影院的數據集都很大,大約爲16 MB,由於JsonWriter.string()無法序列化一個很大的字符串,因此它獲得OutOfMemory錯誤。
是否可以直接從AllMoviesSpiceRequest緩存每個影院作爲其下載?我不確定是否可以從SpiceRequest創建並調用SpiceManager。還是有更好的方法?
下面是一些示例代碼,給你的想法:
public class AllMoviesSpiceRequest extends
SpringAndroidSpiceRequest<AllMovieTimes> {
public AllMovieTimes loadDataFromNetwork() throws Exception {
AllMovieTimes allMovieTimes = new AllMovieTimes();
// Get all the theaters
Theaters theaters = getRestTemplate().getForObject(
THEATER_JSON_URL + "/" + regionId, Theaters.class);
// Get all the movies
for(Theater t : theaters.all()) {
MovieTimes mt = getRestTemplate().getForObject(
MOVIES_JSON_URL + "/" + t.getId(), MovieTimes.class);
allMovieTimes.add(mt);
// Can I call spiceManager.putInCacheHere???
}
// OutOfMemoryError!!!
return allMovieTimes;
}
}
private class AllMoviesRequestListener implements
RequestListener<AllMovieTimes> {
public void onRequestSuccess(AllMovieTimes allMovieTimes) {
// Add all the movies to the cache
for(MovieTime mt : allMovieTimes) {
spiceManager.putInCache(mt.getCacheKey(), mt);
}
}
}
在此先感謝...