Transcript
Page 1: Лекция Android. Хранение данных

Android приложение

Сохранение данных в приложении

Page 2: Лекция Android. Хранение данных

19:58 2 из 41

Возможные варианты

● Shared preferences (настройки)– Сохранение пар ключ-значений для примитивных типов

Page 3: Лекция Android. Хранение данных

19:58 3 из 41

Возможные варианты

● Shared preferences (настройки)– Сохранение пар ключ-значений для примитивных типов

● Внутренняя память– Сохранение данных на внутренней памяти устройства

Page 4: Лекция Android. Хранение данных

19:58 4 из 41

Возможные варианты

● Shared preferences (настройки)– Сохранение пар ключ-значений для примитивных типов

● Внутренняя память– Сохранение данных на внутренней памяти устройства

● Внешняя память– Сохранение данных на внешней памяти устройства

Page 5: Лекция Android. Хранение данных

19:58 5 из 41

Возможные варианты

● Shared preferences (настройки)– Сохранение пар ключ-значений для примитивных типов

● Внутренняя память– Сохранение данных на внутренней памяти устройства

● Внешняя память– Сохранение данных на внешней памяти устройства

● База данный SQLite– Сохранение структурированных данных в БД

Page 6: Лекция Android. Хранение данных

19:58 6 из 41

Настройки (Shared preferences)

● Класс SharedPreferences ● Позволяет сохранять данные примитивных

типов: boolean, float, int, long и string.

Page 7: Лекция Android. Хранение данных

19:58 7 из 41

Настройки (Shared preferences)

● Класс SharedPreferences ● Позволяет сохранять данные примитивных

типов: boolean, float, int, long и string.● Данные хранятся парами ключ-значение. Ключ

типа String.

Page 8: Лекция Android. Хранение данных

19:58 8 из 41

Настройки (Shared preferences)

● Класс SharedPreferences ● Позволяет сохранять данные примитивных

типов: boolean, float, int, long и string.● Данные хранятся парами ключ-значение. Ключ

типа String.● Сохранение данных выполняется для всех

сессий пользователя, даже если приложение будет убито.

Page 9: Лекция Android. Хранение данных

19:58 9 из 41

Настройки (Shared preferences)

● 2 варианта загрузки настроек в приложение:– getSharedPreferences() - используется, если

необходимо несколько файлов настроек, определяемых именем (первый параметр);

Page 10: Лекция Android. Хранение данных

19:58 10 из 41

Настройки (Shared preferences)

● 2 варианта загрузки настроек в приложение:– getSharedPreferences() - используется, если

необходимо несколько файлов настроек, определяемых именем (первый параметр);

– getPreferences() - используется, если нужен только один файл настроек. Имя не указывается.

Page 11: Лекция Android. Хранение данных

19:58 11 из 41

Настройки (Shared preferences)

● Для изменения настроек необходимо получить объект SharedPreferences.Editor

Page 12: Лекция Android. Хранение данных

19:58 12 из 41

Настройки (Shared preferences)

● Для изменения настроек необходимо получить объект SharedPreferences.Editor

● Добавление значений производиться методами типа: putBoolean(String key, boolean value);putString(String key, String value);

Page 13: Лекция Android. Хранение данных

19:58 13 из 41

Настройки (Shared preferences)

● Для изменения настроек необходимо получить объект SharedPreferences.Editor

● Добавление значений производиться методами типа: putBoolean(String key, boolean value);putString(String key, String value);

● Сохранение настроек производиться методом commit().

Page 14: Лекция Android. Хранение данных

19:58 14 из 41

Настройки (Shared preferences)

● Для изменения настроек необходимо получить объект SharedPreferences.Editor

● Добавление значений производиться методами типа: putBoolean(String key, boolean value);putString(String key, String value);

● Сохранение настроек производиться методом commit().

● Для чтения значений используются методы типа:getBoolean(String key, boolean defValue);getString(String key, String defValue);

Page 15: Лекция Android. Хранение данных

19:58 15 из 41

Настройки (Shared preferences)

public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; @Override protected void onCreate(Bundle state) { super.onCreate(state); . . . // Восстановление настроек SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); }

@Override protected void onStop() { super.onStop();

// Получаем объект Editor для изменения настроек SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Сохранить изменения! editor.commit(); }}

Page 16: Лекция Android. Хранение данных

19:58 16 из 41

Настройки (Shared preferences)

● Особенности:– метод contains(String key) для проверки наличия настройки;

Page 17: Лекция Android. Хранение данных

19:58 17 из 41

Настройки (Shared preferences)

● Особенности:– метод contains(String key) для проверки наличия настройки;

– метод Map<String, ?> getAll() возвращает все настройки из файла;

Page 18: Лекция Android. Хранение данных

19:58 18 из 41

Настройки (Shared preferences)

● Особенности:– метод contains(String key) для проверки наличия настройки;

– метод Map<String, ?> getAll() возвращает все настройки из файла;

– метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек;

Page 19: Лекция Android. Хранение данных

19:58 19 из 41

Настройки (Shared preferences)

● Особенности:– метод contains(String key) для проверки наличия настройки;

– метод Map<String, ?> getAll() возвращает все настройки из файла;

– метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек;

– метод clear() - удаляет все настройки из SharedPreferences.Editor;

Page 20: Лекция Android. Хранение данных

19:58 20 из 41

Настройки (Shared preferences)

● Особенности:– метод contains(String key) для проверки наличия настройки;

– метод Map<String, ?> getAll() возвращает все настройки из файла;

– метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек;

– метод clear() - удаляет все настройки из SharedPreferences.Editor;

– метод remove(String key) — помечает значение для удаления, которое будет произведено после вызова commit().

Page 21: Лекция Android. Хранение данных

19:58 21 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

Page 22: Лекция Android. Хранение данных

19:58 22 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

Page 23: Лекция Android. Хранение данных

19:58 23 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

● Для создания файла применяется методFileOutputStream openFileOutput(String name, int mode).

Page 24: Лекция Android. Хранение данных

19:58 24 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

● Для создания файла применяется методFileOutputStream openFileOutput(String name, int mode).

● Для записи в файл — метод write().

Page 25: Лекция Android. Хранение данных

19:58 25 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

● Для создания файла применяется методFileOutputStream openFileOutput(String name, int mode).

● Для записи в файл — метод write().

● Для закрытия файла — метод close().

Page 26: Лекция Android. Хранение данных

19:58 26 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

● Для создания файла применяется методFileOutputStream openFileOutput(String name, int mode).

● Для записи в файл — метод write().

● Для закрытия файла — метод close().

● Для открытия файла на чтение методFileInputStream openFileInput(String name).

Page 27: Лекция Android. Хранение данных

19:58 27 из 41

Внутренняя память приложения

● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю.

● Файлы удаляются вместе с приложением.

● Для создания файла применяется методFileOutputStream openFileOutput(String name, int mode).

● Для записи в файл — метод write().

● Для закрытия файла — метод close().

● Для открытия файла на чтение методFileInputStream openFileInput(String name).

● Для чтения из файла — метод read().

Page 28: Лекция Android. Хранение данных

19:58 28 из 41

Внутренняя память приложения

● Особенности:

– для сохранения кэша рекомендуется использовать метод getCacheDir();

Page 29: Лекция Android. Хранение данных

19:58 29 из 41

Внутренняя память приложения

● Особенности:

– для сохранения кэша рекомендуется использовать метод getCacheDir();

– метод getFilesDir() возвращает абсолютный путь к файлу приложения;

Page 30: Лекция Android. Хранение данных

19:58 30 из 41

Внутренняя память приложения

● Особенности:

– для сохранения кэша рекомендуется использовать метод getCacheDir();

– метод getFilesDir() возвращает абсолютный путь к файлу приложения;

– метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти;

Page 31: Лекция Android. Хранение данных

19:58 31 из 41

Внутренняя память приложения

● Особенности:

– для сохранения кэша рекомендуется использовать метод getCacheDir();

– метод getFilesDir() возвращает абсолютный путь к файлу приложения;

– метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти;

– метод deleteFile() удаляет существующий файл;

Page 32: Лекция Android. Хранение данных

19:58 32 из 41

Внутренняя память приложения

● Особенности:

– для сохранения кэша рекомендуется использовать метод getCacheDir();

– метод getFilesDir() возвращает абсолютный путь к файлу приложения;

– метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти;

– метод deleteFile() удаляет существующий файл;

– метод fileList() возвращает массив имён файлов, сохранённых во внутренней памяти.

Page 33: Лекция Android. Хранение данных

19:58 33 из 41

Внешняя память

● SD-карта памяти или встроенная память для хранения информации.

Page 34: Лекция Android. Хранение данных

19:58 34 из 41

Внешняя память

● SD-карта памяти или встроенная память для хранения информации.

● Файлы доступны всем и могут быть изменены (или удалены) пользователем.

Page 35: Лекция Android. Хранение данных

19:58 35 из 41

Внешняя память

● SD-карта памяти или встроенная память для хранения информации.

● Файлы доступны всем и могут быть изменены (или удалены) пользователем.

● Метод для проверки доступности внешней памяти:getExternalStorageState()

Page 36: Лекция Android. Хранение данных

19:58 36 из 41

Внешняя память

boolean mExternalStorageAvailable = false;

boolean mExternalStorageWriteable = false;

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

// Можно читать и записывать медиа файлы

mExternalStorageAvailable = mExternalStorageWriteable = true;

} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

// Можно только читать медиа файлы

mExternalStorageAvailable = true;

mExternalStorageWriteable = false;

} else {

// Что-то произошло. Это может быть одно из множества состояний,

// но точно известно, что нет возможности ни записывать, ни читать файлы

mExternalStorageAvailable = mExternalStorageWriteable = false;

}

Page 37: Лекция Android. Хранение данных

19:58 37 из 41

Внешняя память

● Доступ к файлам через методFile getExternalFilesDir(String type).

Page 38: Лекция Android. Хранение данных

19:58 38 из 41

Внешняя память

● Доступ к файлам через методFile getExternalFilesDir(String type).

● type — тип возвращаемой директории: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES или null.

Page 39: Лекция Android. Хранение данных

19:58 39 из 41

Внешняя память

● Доступ к файлам через методFile getExternalFilesDir(String type).

● type — тип возвращаемой директории: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES или null.

● Метод предоставляет доступ к общедоступному каталогуFile getExternalStoragePublicDirectory(String type).

Page 40: Лекция Android. Хранение данных

19:58 40 из 41

Внешняя память

● Доступ к файлам через методFile getExternalFilesDir(String type).

● type — тип возвращаемой директории: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES или null.

● Метод предоставляет доступ к общедоступному каталогуFile getExternalStoragePublicDirectory(String type).

● Доступ к каталогу хранения кэш файловFile getExternalCacheDir()

Page 41: Лекция Android. Хранение данных

19:58 41 из 41

Окно настроек

● Базовый класс — PreferenceActivity

● Начиная с API Level 11 рекомендуется использовать PreferenceFragment

● Основные стандартные настройки:

– CheckBoxPreference

– ListPreference

– EditTextPreference


Recommended