如何在Android中实现ListView缓存

5
我有一个包含大量数据的ListView。
第一次加载时,我从Webservice中加载所有数据。现在我想将数据缓存起来,以便下次打开页面时,可以从缓存中获取数据,而不是再次查询Webservice。
我该如何做到这一点?

有这方面的示例代码吗? - jithu
3个回答

12
我会尽力为您翻译。这段内容是关于编程的,作者假设您已经将从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();

ArrayList<FollowerInfo> followers; 其中FollowerInfo是一个可序列化的类。我使用arraylist followers将数据添加到列表中。我认为我需要存储或缓存这个arraylist。我该如何做呢? - jithu
由于ArrayList默认是可序列化的,因为FollowerInfo也是可序列化的,所以存储/加载整个ArrayList时不应该有任何问题。 - fardjad
我该如何在你的代码中应用这个?意思是我应该把我的数组列表放在哪里?objectOutputStream.writeObject(followers); 然后在加载时,你的对象是文件类型,那么我想再次将它转换为ArrayList? - jithu
使用 objectOutputStream.writeObject(followers); 存储对象,使用 ArrayList< FollowerInfo> followers = (ArrayList<FollowerInfo>)objectInputStream.readObject(); 读取它。 - fardjad
还有一个问题。我该如何检查特定文件是否存在。 - jithu

0

您可以通过将通过Web服务获得的数据保存到相应的SQLite数据库中来实现此操作。如果您想获取比数据库中最后一条记录更新的数据,则应在SharedPreferences文件中保存一个键值。例如:

我想从Web服务获取所有日历事件,

今天用户仅访问了1号到10号事件的1月份事件(首次通过Web服务获得这些事件,本地存储在SQLite数据库中,然后使用光标显示)。

明天,一旦用户加载应用程序,已检索到的数据将从SQLite数据库(“缓存”)中加载,并且用户只会通过Web服务获取比10更新的事件;并重复前一天的过程(即将检索到的实体存储在SQLite DB中,然后从1到“x”全部显示它们)。

在这种情况下,您将事件1到10存储在数据库中,并将“11”存储在共享首选项中,以便您知道下一批要获取的实体的起始点。希望我能指导您。

看一下Android上可用的存储选项:http://developer.android.com/guide/topics/data/data-storage.html

祝一切顺利 :)


0

你的情况类似于这个问题:

如何在Android中缓存ListView数据?

如果你想要保留信息的时间超过应用程序的生命周期,那么你必须决定是否使用SQL数据库,否则适配器就可以了。

在SDK包的示例中提供了Api Demos,其中有几个使用ListAdapters的列表示例。例如List5.java。


我能将ArrayList插入到SQLite中吗?而不需要将其转换为字符串。 - jithu
你能提供这个问题的详细答案吗? - Srinivas Keerthiprakasam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接