gpt4 book ai didi

java - Robospice:从 SpiceRequest 保存到缓存

转载 作者:行者123 更新时间:2023-11-30 03:30:50 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com