ݺߣ

ݺߣShare a Scribd company logo
Android приложение

Сохранение данных в приложении
Возможные варианты
●

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

19:58

Сохранение пар ключ-значений для примитивных типов

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

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

●

Сохранение пар ключ-значений для примитивных типов

Внутренняя память
–

19:58

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

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

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

●

Внутренняя память
–

●

Сохранение пар ключ-значений для примитивных типов
Сохранение данных на внутренней памяти устройства

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

19:58

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

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

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

●

Внутренняя память
–

●

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

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

●

Сохранение пар ключ-значений для примитивных типов

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

База данный SQLite
–

19:58

Сохранение структурированных данных в БД

5 из 41
Настройки (Shared preferences)
●
●

Класс SharedPreferences
Позволяет сохранять данные примитивных
типов: boolean, float, int, long и string.

19:58

6 из 41
Настройки (Shared preferences)
●
●

●

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

19:58

7 из 41
Настройки (Shared preferences)
●
●

●

●

Класс SharedPreferences
Позволяет сохранять данные примитивных
типов: boolean, float, int, long и string.
Данные хранятся парами ключ-значение. Ключ
типа String.
Сохранение данных выполняется для всех
сессий пользователя, даже если приложение
будет убито.

19:58

8 из 41
Настройки (Shared preferences)
●

2 варианта загрузки настроек в приложение:
–

19:58

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

9 из 41
Настройки (Shared preferences)
●

2 варианта загрузки настроек в приложение:
–

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

–

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

19:58

10 из 41
Настройки (Shared preferences)
●

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

19:58

11 из 41
Настройки (Shared preferences)
●

●

Для изменения настроек необходимо получить объект
SharedPreferences.Editor
Добавление значений производиться методами типа:
putBoolean(String key, boolean value);
putString(String key, String value);

19:58

12 из 41
Настройки (Shared preferences)
●

●

●

Для изменения настроек необходимо получить объект
SharedPreferences.Editor
Добавление значений производиться методами типа:
putBoolean(String key, boolean value);
putString(String key, String value);
Сохранение настроек производиться методом commit().

19:58

13 из 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);

19:58

14 из 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();
}
}
19:58

15 из 41
Настройки (Shared preferences)
●

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

19:58

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

16 из 41
Настройки (Shared preferences)
●

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

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

–

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

19:58

17 из 41
Настройки (Shared preferences)
●

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

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

–

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

–

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

19:58

18 из 41
Настройки (Shared preferences)
●

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

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

–

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

–

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

–

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

19:58

19 из 41
Настройки (Shared preferences)
●

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

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

–

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

–

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

–

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

–

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

19:58

20 из 41
Внутренняя память приложения
●

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

19:58

21 из 41
Внутренняя память приложения
●

●

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

19:58

22 из 41
Внутренняя память приложения
●

●

●

По-умолчанию файлы во внутренней памяти недоступны
другим приложениям и пользователю.
Файлы удаляются вместе с приложением.
Для создания файла применяется метод
FileOutputStream openFileOutput(String name, int mode).

19:58

23 из 41
Внутренняя память приложения
●

●

●

●

По-умолчанию файлы во внутренней памяти недоступны
другим приложениям и пользователю.
Файлы удаляются вместе с приложением.
Для создания файла применяется метод
FileOutputStream openFileOutput(String name, int mode).
Для записи в файл — метод write().

19:58

24 из 41
Внутренняя память приложения
●

●

●

По-умолчанию файлы во внутренней памяти недоступны
другим приложениям и пользователю.
Файлы удаляются вместе с приложением.
Для создания файла применяется метод
FileOutputStream openFileOutput(String name, int mode).

●

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

●

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

19:58

25 из 41
Внутренняя память приложения
●

●

●

По-умолчанию файлы во внутренней памяти недоступны
другим приложениям и пользователю.
Файлы удаляются вместе с приложением.
Для создания файла применяется метод
FileOutputStream openFileOutput(String name, int mode).

●

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

●

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

●

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

19:58

26 из 41
Внутренняя память приложения
●

●

●

По-умолчанию файлы во внутренней памяти недоступны
другим приложениям и пользователю.
Файлы удаляются вместе с приложением.
Для создания файла применяется метод
FileOutputStream openFileOutput(String name, int mode).

●

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

●

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

●

●

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

19:58

27 из 41
Внутренняя память приложения
●

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

19:58

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

28 из 41
Внутренняя память приложения
●

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

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

–

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

19:58

29 из 41
Внутренняя память приложения
●

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

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

–

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

–

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

19:58

30 из 41
Внутренняя память приложения
●

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

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

–

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

–

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

–

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

19:58

31 из 41
Внутренняя память приложения
●

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

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

–

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

–

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

–

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

–

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

19:58

32 из 41
Внешняя память
●

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

19:58

33 из 41
Внешняя память
●

●

SD-карта памяти или встроенная память для хранения
информации.
Файлы доступны всем и могут быть изменены (или
удалены) пользователем.

19:58

34 из 41
Внешняя память
●

●

●

SD-карта памяти или встроенная память для хранения
информации.
Файлы доступны всем и могут быть изменены (или
удалены) пользователем.
Метод для проверки доступности внешней памяти:
getExternalStorageState()

19:58

35 из 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;
}
19:58

36 из 41
Внешняя память
●

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

19:58

37 из 41
Внешняя память
●

●

Доступ к файлам через метод
File getExternalFilesDir(String type).
type — тип возвращаемой директории: DIRECTORY_MUSIC,
DIRECTORY_PODCASTS, DIRECTORY_RINGTONES,
DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS,
DIRECTORY_PICTURES, DIRECTORY_MOVIES или null.

19:58

38 из 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).

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).
Доступ к каталогу хранения кэш файлов
File getExternalCacheDir()

19:58

40 из 41
Окно настроек
●

●

●

Базовый класс — PreferenceActivity
Начиная с API Level 11 рекомендуется использовать
PreferenceFragment
Основные стандартные настройки:
–

CheckBoxPreference

–

ListPreference

–

EditTextPreference

19:58

41 из 41

More Related Content

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

  • 2. Возможные варианты ● Shared preferences (настройки) – 19:58 Сохранение пар ключ-значений для примитивных типов 2 из 41
  • 3. Возможные варианты ● Shared preferences (настройки) – ● Сохранение пар ключ-значений для примитивных типов Внутренняя память – 19:58 Сохранение данных на внутренней памяти устройства 3 из 41
  • 4. Возможные варианты ● Shared preferences (настройки) – ● Внутренняя память – ● Сохранение пар ключ-значений для примитивных типов Сохранение данных на внутренней памяти устройства Внешняя память – 19:58 Сохранение данных на внешней памяти устройства 4 из 41
  • 5. Возможные варианты ● Shared preferences (настройки) – ● Внутренняя память – ● Сохранение данных на внутренней памяти устройства Внешняя память – ● Сохранение пар ключ-значений для примитивных типов Сохранение данных на внешней памяти устройства База данный SQLite – 19:58 Сохранение структурированных данных в БД 5 из 41
  • 6. Настройки (Shared preferences) ● ● Класс SharedPreferences Позволяет сохранять данные примитивных типов: boolean, float, int, long и string. 19:58 6 из 41
  • 7. Настройки (Shared preferences) ● ● ● Класс SharedPreferences Позволяет сохранять данные примитивных типов: boolean, float, int, long и string. Данные хранятся парами ключ-значение. Ключ типа String. 19:58 7 из 41
  • 8. Настройки (Shared preferences) ● ● ● ● Класс SharedPreferences Позволяет сохранять данные примитивных типов: boolean, float, int, long и string. Данные хранятся парами ключ-значение. Ключ типа String. Сохранение данных выполняется для всех сессий пользователя, даже если приложение будет убито. 19:58 8 из 41
  • 9. Настройки (Shared preferences) ● 2 варианта загрузки настроек в приложение: – 19:58 getSharedPreferences() - используется, если необходимо несколько файлов настроек, определяемых именем (первый параметр); 9 из 41
  • 10. Настройки (Shared preferences) ● 2 варианта загрузки настроек в приложение: – getSharedPreferences() - используется, если необходимо несколько файлов настроек, определяемых именем (первый параметр); – getPreferences() - используется, если нужен только один файл настроек. Имя не указывается. 19:58 10 из 41
  • 11. Настройки (Shared preferences) ● Для изменения настроек необходимо получить объект SharedPreferences.Editor 19:58 11 из 41
  • 12. Настройки (Shared preferences) ● ● Для изменения настроек необходимо получить объект SharedPreferences.Editor Добавление значений производиться методами типа: putBoolean(String key, boolean value); putString(String key, String value); 19:58 12 из 41
  • 13. Настройки (Shared preferences) ● ● ● Для изменения настроек необходимо получить объект SharedPreferences.Editor Добавление значений производиться методами типа: putBoolean(String key, boolean value); putString(String key, String value); Сохранение настроек производиться методом commit(). 19:58 13 из 41
  • 14. Настройки (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); 19:58 14 из 41
  • 15. Настройки (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(); } } 19:58 15 из 41
  • 16. Настройки (Shared preferences) ● Особенности: – 19:58 метод contains(String key) для проверки наличия настройки; 16 из 41
  • 17. Настройки (Shared preferences) ● Особенности: – метод contains(String key) для проверки наличия настройки; – метод Map<String, ?> getAll() возвращает все настройки из файла; 19:58 17 из 41
  • 18. Настройки (Shared preferences) ● Особенности: – метод contains(String key) для проверки наличия настройки; – метод Map<String, ?> getAll() возвращает все настройки из файла; – метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек; 19:58 18 из 41
  • 19. Настройки (Shared preferences) ● Особенности: – метод contains(String key) для проверки наличия настройки; – метод Map<String, ?> getAll() возвращает все настройки из файла; – метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек; – метод clear() - удаляет все настройки из SharedPreferences.Editor; 19:58 19 из 41
  • 20. Настройки (Shared preferences) ● Особенности: – метод contains(String key) для проверки наличия настройки; – метод Map<String, ?> getAll() возвращает все настройки из файла; – метод registerOnSharedPreferenceChangeListener() позволяет зарегистрировать callback, реагирующий на изменение настроек; – метод clear() - удаляет все настройки из SharedPreferences.Editor; – метод remove(String key) — помечает значение для удаления, которое будет произведено после вызова commit(). 19:58 20 из 41
  • 21. Внутренняя память приложения ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. 19:58 21 из 41
  • 22. Внутренняя память приложения ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. 19:58 22 из 41
  • 23. Внутренняя память приложения ● ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. Для создания файла применяется метод FileOutputStream openFileOutput(String name, int mode). 19:58 23 из 41
  • 24. Внутренняя память приложения ● ● ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. Для создания файла применяется метод FileOutputStream openFileOutput(String name, int mode). Для записи в файл — метод write(). 19:58 24 из 41
  • 25. Внутренняя память приложения ● ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. Для создания файла применяется метод FileOutputStream openFileOutput(String name, int mode). ● Для записи в файл — метод write(). ● Для закрытия файла — метод close(). 19:58 25 из 41
  • 26. Внутренняя память приложения ● ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. Для создания файла применяется метод FileOutputStream openFileOutput(String name, int mode). ● Для записи в файл — метод write(). ● Для закрытия файла — метод close(). ● Для открытия файла на чтение метод FileInputStream openFileInput(String name). 19:58 26 из 41
  • 27. Внутренняя память приложения ● ● ● По-умолчанию файлы во внутренней памяти недоступны другим приложениям и пользователю. Файлы удаляются вместе с приложением. Для создания файла применяется метод FileOutputStream openFileOutput(String name, int mode). ● Для записи в файл — метод write(). ● Для закрытия файла — метод close(). ● ● Для открытия файла на чтение метод FileInputStream openFileInput(String name). Для чтения из файла — метод read(). 19:58 27 из 41
  • 28. Внутренняя память приложения ● Особенности: – 19:58 для сохранения кэша рекомендуется использовать метод getCacheDir(); 28 из 41
  • 29. Внутренняя память приложения ● Особенности: – для сохранения кэша рекомендуется использовать метод getCacheDir(); – метод getFilesDir() возвращает абсолютный путь к файлу приложения; 19:58 29 из 41
  • 30. Внутренняя память приложения ● Особенности: – для сохранения кэша рекомендуется использовать метод getCacheDir(); – метод getFilesDir() возвращает абсолютный путь к файлу приложения; – метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти; 19:58 30 из 41
  • 31. Внутренняя память приложения ● Особенности: – для сохранения кэша рекомендуется использовать метод getCacheDir(); – метод getFilesDir() возвращает абсолютный путь к файлу приложения; – метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти; – метод deleteFile() удаляет существующий файл; 19:58 31 из 41
  • 32. Внутренняя память приложения ● Особенности: – для сохранения кэша рекомендуется использовать метод getCacheDir(); – метод getFilesDir() возвращает абсолютный путь к файлу приложения; – метод getDir() содаёт (или открывает существующий) каталог во внутренней памяти; – метод deleteFile() удаляет существующий файл; – метод fileList() возвращает массив имён файлов, сохранённых во внутренней памяти. 19:58 32 из 41
  • 33. Внешняя память ● SD-карта памяти или встроенная память для хранения информации. 19:58 33 из 41
  • 34. Внешняя память ● ● SD-карта памяти или встроенная память для хранения информации. Файлы доступны всем и могут быть изменены (или удалены) пользователем. 19:58 34 из 41
  • 35. Внешняя память ● ● ● SD-карта памяти или встроенная память для хранения информации. Файлы доступны всем и могут быть изменены (или удалены) пользователем. Метод для проверки доступности внешней памяти: getExternalStorageState() 19:58 35 из 41
  • 36. Внешняя память 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; } 19:58 36 из 41
  • 37. Внешняя память ● Доступ к файлам через метод File getExternalFilesDir(String type). 19:58 37 из 41
  • 38. Внешняя память ● ● Доступ к файлам через метод File getExternalFilesDir(String type). type — тип возвращаемой директории: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES или null. 19:58 38 из 41
  • 39. Внешняя память ● ● ● Доступ к файлам через метод File getExternalFilesDir(String type). type — тип возвращаемой директории: DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES или null. Метод предоставляет доступ к общедоступному каталогу File getExternalStoragePublicDirectory(String type). 19:58 39 из 41
  • 40. Внешняя память ● ● ● ● Доступ к файлам через метод 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() 19:58 40 из 41
  • 41. Окно настроек ● ● ● Базовый класс — PreferenceActivity Начиная с API Level 11 рекомендуется использовать PreferenceFragment Основные стандартные настройки: – CheckBoxPreference – ListPreference – EditTextPreference 19:58 41 из 41