【发布时间】:2013-03-01 09:13:08
【问题描述】:
我有一个包含大量数据的 ListView。
第一次,我从 Web 服务加载所有数据。
现在我想缓存该数据,这样,如果我要再次打开该页面,我可以从缓存中获取数据,而不是再次查询网络服务。
我该怎么做?
【问题讨论】:
-
有任何示例代码吗?
标签: android caching memorycache
我有一个包含大量数据的 ListView。
第一次,我从 Web 服务加载所有数据。
现在我想缓存该数据,这样,如果我要再次打开该页面,我可以从缓存中获取数据,而不是再次查询网络服务。
我该怎么做?
【问题讨论】:
标签: android caching memorycache
我假设您将从 WebService 检索到的数据存储在一个可序列化的对象中(正如您在编辑之前在问题中所说的那样。)
您可以将可序列化的对象存储到文件中并稍后加载它们:
商店:
FileOutputStream fileOutputStream = yourContext.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(yourObject);
objectOutputStream.close();
加载:
FileInputStream fileInputStream = yourContext.openFileInput(fileName);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
Object yourObject = (Object)objectInputStream.readObject();
objectInputStream.close();
【讨论】:
ArrayLists 默认是可序列化的,因为FollowerInfo 也是可序列化的,存储/加载整个ArrayList 应该没有任何问题。
objectOutputStream.writeObject(followers); 存储对象并使用ArrayList< FollowerInfo> followers = (ArrayList<FollowerInfo>)objectInputStream.readObject(); 读取它。
您可以通过将通过 Web 服务获得的数据保存到相应结构化的 SQLite 数据库中来做到这一点。如果您想获得比数据库中最后一条记录更新的数据,那么您应该在 SharedPreferences 文件中保存一个键值。示例:
我想从网络服务获取所有日历事件,
今天用户只从事件号访问了一月份的事件。 1 到事件编号。 10(首次通过web服务获取,本地存储在SQLite数据库中,然后使用游标显示)。
明天,一旦用户加载应用程序,已经检索到的数据将从 SQLite 数据库(“缓存”)加载,用户将只能通过 Web 服务获取 10 个以上的事件;并重复前一天的过程(即将检索到的实体存储在 SQLite DB 中,然后从 1 到 'x' 全部显示)。
在这种情况下,您将事件 1 到 10 存储在数据库中,并将“11”存储在您的共享首选项中,这样您就可以知道下一批要获取的实体的起点。我希望我能指导你。
查看 Android 上可用的存储选项:http://developer.android.com/guide/topics/data/data-storage.html
一切顺利:)
【讨论】:
你的情况是这样的:
How to cache listview data in android?
如果你想维护信息超过应用程序的生命周期,你必须决定是否要使用 SQL 数据库,否则适配器就可以了。
在 SDK 包的 Samples 提供的 Api 演示中,有几个使用 ListAdapters 的 List 示例。例如 List5.java。
【讨论】: