Как реализовать кэширование 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
Всего наилучшего:)