Как реализовать кэширование ListView в Android

У меня есть ListView, который содержит большой набор данных.
В первый раз я загружаю все данные из веб-сервиса.

Теперь я хочу кешировать эти данные, чтобы, если я снова открыл эту страницу, я мог получить данные из кеша, а не снова запрашивать веб-сервис.

Как я это сделал?.

3 ответа

Решение

Я предполагаю, что вы храните данные, полученные из 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();

Ваш случай похож на этот:

Как кэшировать данные списка просмотра в Android?

Вы должны решить, собираетесь ли вы использовать базу данных SQL, если вы хотите хранить информацию дольше, чем время жизни приложения, иначе адаптер будет в порядке.

На демоверсиях Api, представленных в пакете Samples for SDK, есть несколько примеров использования ListAdapters. Например, List5.java.

Вы можете сделать это, сохранив данные, полученные через веб-сервис, в базу данных SQLite, структурированную соответствующим образом. Если вы хотите получить более новые данные, чем последняя запись в вашей базе данных, вам следует сохранить значение ключа в файле SharedPreferences. Пример:

Я хотел бы получить все события календаря от веб-службы,

Сегодня пользователь получил доступ только к событиям января из события №. 1 к событию № 10 (впервые они получены через веб-сервис, хранятся локально в базе данных SQLite, а затем отображаются с использованием курсора).

Завтра, как только пользователь загрузит приложение, уже извлеченные данные будут загружены из базы данных SQLite ("кеш"), и пользователь получит только события, которые новее 10, через веб-сервис; и повторите процесс предыдущего дня (то есть сохраните полученные объекты в БД SQLite, а затем отобразите их все от 1 до 'x').

В этом случае вы сохраняете события с 1 по 10 в базе данных и сохраняете "11" в ваших общих настройках, чтобы знать начальную точку для получения следующей партии сущностей. Я надеюсь, что мне удалось направить вас.

Посмотрите варианты хранения, доступные на Android: http://developer.android.com/guide/topics/data/data-storage.html

Всего наилучшего:)

Другие вопросы по тегам