- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 SpiceRequest,它的工作是预先缓存一堆数据,然后可以在单独的 SpiceRequest 中单独加载这些数据。
例如,假设我的应用程序通过 SpiceRequest 下载特定剧院的电影时间,我需要一个复合 SpiceRequest 来下载并预缓存一个地区所有剧院的所有电影时间。
让我们称之为 AllMoviesSpiceRequest,它是 SpringAndroidSpiceRequest 的子类。它的 loadDataFromNetwork() 方法多次调用 getRestTemplate().getForObject()。它将所有数据放入一个包含对象中并返回它。
我的计划是在调用 onRequestSuccess 时为每个影院调用 SpiceManager.putInCache。问题是所有影院的数据集都很大,大约 16 MB,并且由于 JsonWriter.string() 无法序列化这么大的字符串而导致内存不足错误。
是否可以在下载时直接从 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);
}
}
}
提前致谢...
最佳答案
如果您的结果太大而无法由 Jackson 处理,那可能是设计问题。
实际上,拥有 16 MB 的 json 并不是一个好的移动解决方案。它会让您的用户在很长一段时间内都可以使用可用的手机,而这不是 Android 应用程序应有的工作方式。即使 RS 允许在后台下载数据,您也应该真正关心响应能力。
在 RS 中,REST 请求产生的所有数据都将直接保存,以后无法拆分它们。至少 Jackson/Gson 序列化是这样。 Json 不是数据库,以后不能让您有选择地访问数据。
我可以回答说,您应该转向数据库中的数据序列化,使用 ORMLite,可能还有 RS ORMLite 模块,这可以让您将内容存储在单独的表中,稍后您将能够有选择地检索它们。
然而,这里真正的答案是你应该远离下载如此大量的数据,或者使用二进制格式(protobuf、kryo?)之类的东西并将东西存储在数据库中。
但最简单、更常见的解决方案实际上是下载更少量的数据。
关于java - Robospice:从 SpiceRequest 保存到缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509134/
我有一个 SpiceRequest,它的工作是预先缓存一堆数据,然后可以在单独的 SpiceRequest 中单独加载这些数据。 例如,假设我的应用程序通过 SpiceRequest 下载特定剧院的电
我有一个扩展 SpiceRequest 的类,但是当 loadDataFromNetwork()< 发生故障时,我需要调用 onRequestFailure(SpiceException) 方法 方法
我是一名优秀的程序员,十分优秀!