我有一个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);
}
}
}
在此先感谢...