【问题标题】:How to implement ListView caching in Android如何在Android中实现ListView缓存
【发布时间】:2013-03-01 09:13:08
【问题描述】:

我有一个包含大量数据的 ListView。
第一次,我从 Web 服务加载所有数据。

现在我想缓存该数据,这样,如果我要再次打开该页面,我可以从缓存中获取数据,而不是再次查询网络服务。

我该怎么做?

【问题讨论】:

  • 有任何示例代码吗?

标签: android caching memorycache


【解决方案1】:

我假设您将从 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 是一个可序列化的类。我使用 arraylist 追随者将数据添加到列表中。我想我需要存储或缓存这个 arraylist。我该怎么做?。
  • ArrayLists 默认是可序列化的,因为FollowerInfo 也是可序列化的,存储/加载整个ArrayList 应该没有任何问题。
  • 我怎样才能在你的代码中应用这个?意思是我把我的数组列表放在哪里?objectOutputStream.writeObject(followers);并且在加载你的对象是类型文件,然后我想再次将它作为数组列表?
  • 是的,使用objectOutputStream.writeObject(followers); 存储对象并使用ArrayList< FollowerInfo> followers = (ArrayList<FollowerInfo>)objectInputStream.readObject(); 读取它。
  • 还有一个问题。如何检查特定文件是否存在。
【解决方案2】:

您可以通过将通过 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

一切顺利:)

【讨论】:

    【解决方案3】:

    你的情况是这样的:

    How to cache listview data in android?

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

    在 SDK 包的 Samples 提供的 Api 演示中,有几个使用 ListAdapters 的 List 示例。例如 List5.java。

    【讨论】:

    • 我可以将数组列表插入到 sql lite 中吗?无需将其更改为字符串。
    • 你能提供这个问题的详细答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多