Android sharedpreferences save object

SharedPreferences

Чтобы получить экземпляр класса SharedPreferences для получения доступа к настройкам в коде приложения используются три метода:

  • getPreferences() — внутри активности, чтобы обратиться к определённому для активности предпочтению;
  • getSharedPreferences() — внутри активности, чтобы обратиться к предпочтению на уровне приложения;
  • getDefaultSharedPreferences() — из объекта PreferencesManager, чтобы получить общедоступную настройку, предоставляемую Android.

Все эти методы возвращают экземпляр класса SharedPreferences, из которого можно получить соответствующую настройку с помощью ряда методов:

  • getBoolean(String key, boolean defValue)
  • getFloat(String key, float defValue)
  • getInt(String key, int defValue)
  • getLong(String key, long defValue)
  • getString(String key, String defValue)

Обратите внимание, что тип double не поддерживается.

Чтобы создать или изменить Общие настройки, нужно вызвать метод getSharedPreferences в контексте приложения, передав имя общих настроек (имя файла):

По умолчанию используется MODE_PRIVATE — только приложение имеет доступ к настройкам. Также существуют другие режимы, с которыми практически не встречался.

  • MODE_APPEND — присоединяет новые настройки к существующим
  • MODE_ENABLE_WRITE_AHEAD_LOGGING
  • MODE_MULTI_PROCESS
  • MODE_WORLD_READABLE — позволяет другим приложениям читать настройки
  • MODE_WORLD_WRITEABLE — позволяет другим приложениям записывать новые настройки

Для любознательных могу добавить, что файлы настроек хранятся в каталоге /data/data/имя_пакета/shared_prefs/имя_файла_настроек.xml. Поэтому в отладочных целях, если вам нужно сбросить настройки в эмуляторе, то при помощи перспективы DDMS, используя файловый менеджер, зайдите в нужную папку, удалите файл настроек и перезапустите эмулятор, так как эмулятор хранит данные в памяти, которые он сбрасывает в файл. На устройстве вы можете удалить программу и поставить ее заново, то же самое можно сделать и на эмуляторе, что бывает проще, чем удалять файл настроек вручную и перезапускать эмулятор.

Если открыть файл настроек текстовым редактором, то можно увидеть приблизительно такое:

В данном случае в настройках хранятся только строковые значения.

Сохранение значений параметров

Для удобства создадим константу для имени файла настроек, например:

Далее нужно создать параметры, которые вы хотите сохранять в настройках. Удобнее их сделать константами:

Когда вы определили названия параметров, то можете сохранять любые значения этих параметров. Для этого создаём переменную, представляющую экземпляр класса SharedPreferences:

Внутри метода onCreate() вы инициализируете эту переменную:

Вы передаёте в указанный метод название вашего файла (он будет создан автоматически) и стандартное разрешение, дающее доступ только компонентам приложения.

Чтобы внести изменения в настройки (редактировать), нужно использовать класс SharedPreferences.Editor. Получить объект Editor можно через вызов метода edit объекта SharedPreferences, который вы хотите изменить. После того, как вы внесли все необходимые изменения, вызовите метод commit() или apply() объекта Editor, чтобы изменения вступили в силу. Метод apply() появился в API 9 и работает в асинхронном режиме, что является более предпочтительным вариантом. Метод commit() приходится использовать для старых версий и кроме того, он возвращает значение true в успешном случае и false в случае ошибки. Если вам надо отслеживать ошибки, то используйте его.

Предположим, что у нас есть два текстовых поля, где пользователь должен ввести имя кота и его и возраст. Чтобы сохранить параметр, нужно получить текст, который ввел пользователь, через метод getText().toString():

Читайте также:  Видеоплеер для андроид список воспроизведения

Получив нужный текст, сохраняем его через метод putString() (есть также putLong(), putBoolean() и т.п.):

Как правило, параметры сохраняют в методах активности onPause() или onStop() в тех случаях, когда данные требуются сохранить между запусками приложения. Но могут быть и другие сценарии.

Чтение значений параметров

Для считывания данных при загрузке приложения обычно используют методы onCreate() или onResume(). Нам нужно получить доступ к настройкам программы и проверить, есть ли среди них нужный нам параметр. Нас интересует ключ Nickname. Если мы его найдём, то загрузим его значение в текстовое поле.

В этих строчках кода мы проверили существование параметра APP_PREFERENCES_NAME и получили его значение через getString(), передавая ключ и значение по умолчанию (используется в том случае, если для данного ключа пока что не сохранено никакое значение). Осталось только загрузить полученный результат в текстовое поле.

Аналогично поступаем и с другими параметрами через методы get () (getLong, getBoolean() и т.д.).

Если вам ещё не понятно, то ниже исходный код:

Показать код (щелкните мышкой)

Можно получить ассоциативный массив со всеми ключами и значениями через метод getAll(). После этого можно проверить наличие конкретного ключа с помощью метода contains().

Очистка значений

Для очистки значений используйте методы SharedPreferences.Editor.remove(String key) и SharedPreferences.Editor.clear().

Методы getStringSet() и putStringSet()

Начиная с API 11, у класса SharedPreferences появился новый метод getStringSet(), а у класса SharedPreferences.Editor родственный ему метод putStringSet(). Данные методы позволяют работать с наборами строк, что бывает удобно при большом количестве настроек, которые нужно сразу записать или считать.

Удаление файла

Как я уже сказал, файл настроек хранится в /data/data/имя_пакета/shared_prefs/имя_файла_настроек.xml. Вы можете удалить его программно, например так:

Учтите, что данные могут оставаться в памяти и временном файле *.bak. Поэтому, даже после удаления файла, он может заново воссоздаться. Вообще удалять файл не рекомендуется. Он автоматически удалится при удалении самой программы.

Метод getPreferences() — Сохранение состояния активности

Если вы хотите сохранить информацию, которая принадлежит активности и не должна быть доступна другим компонентам (например, переменным экземпляра класса), вы можете вызвать метод Activity.getPreferences() без указания названия Общих настроек. Доступ к возвращённому ассоциативному массиву Общих настроек ограничен активностью, из которой он был вызван. Каждая активность поддерживает только один безымянный объект Общих настроек.

Сохранение настроек на SD-карту

Сам файл с настройками хранится в системе и обычному пользователю он не виден. Если вам понадобится получить все значения, хранимые в настройках, то вы можете считать все данные при помощи метода getAll() и записать их в файл, который можно сохранить на SD-карте:

Я у тебя первый?

Предположим, вы хотите выводить пользователю какую-то информацию при первом запуске приложения (краткую инструкцию, заставку и т.п.).

Запомнить пользователя

Иногда требуется запомнить имя пользователя или другие данные (пин-код, номер телефона и т.д.). В этом случае вам также подойдут предпочтения, когда вы просто сохраняете нужную строку из текстового поля:

Запомнить состояние переключателей

Если нужно запомнить состояние переключателей, то код может быть таким. Создадим разметку с тремя переключателями.

Код, который отслеживает выбор переключателя и записывает состояние в настройки.

getDefaultSharedPreferences()

В используемых примерах я использовал getSharedPreferences() с придумыванием имени файла для хранения настроек. Этот способ придаёт гибкости в том случае, когда вам нужно создать несколько отдельных файлов. Но если вам нужен один файл, то можно ничего не придумывать, а использовать метод getDefaultSharedPreferences() из объекта PreferencesManager. Система сама сгенерирует имя файла из имени вашего пакета с добавлением слова _preferences. Вот как выглядит связка из трёх методов в исходниках Android (обратите внимание на выделенный текст).

Читайте также:  Для чего папка android secure

Поэтому примеры можно переделать следующим образом.

Удаляем файл настроек

В API 24 появился новый метод, позволяющий удалить сам файл настроек. До этого можно было удалить своими силами, зная его местоположение. Поэтому универсальный код будет приблизительно следующим.

Источник

SharedPreferences. Сохранение данных в постоянное хранилище Android

SharedPreferences — постоянное хранилище на платформе Android, используемое приложениями для хранения своих настроек, например. Это хранилище является относительно постоянным, пользователь может зайти в настройки приложения и очистить данные приложения, тем самым очистив все данные в хранилище.

Для работы с данными постоянного хранилища нам понадобится экземпляр класса SharedPreferences, который можно получить у любого объекта, унаследованного от класса android.content.Context (например, Activity или Service). У объектов этих классов (унаследованных от Context) есть метод getSharedPreferences, который принимает 2 параметра:

  • name — выбранный файл настроек. Если файл настроек с таким именем не существует, он будет создан при вызове метода edit() и фиксировании изменений с помощью метода commit().
  • mode — режим работы. Возможные значения:
    • MODE_PRIVATE — используется в большинстве случаев для приватного доступа к данным приложением-владельцем
    • MODE_WORLD_READABLE — только для чтения
    • MODE_WORLD_WRITEABLE — только записи
    • MODE_MULTI_PROCESS — несколько процессов совместно используют один файл SharedPreferences.

ВНИМАНИЕ! Все модификаторы кроме MODE_PRIVATE в настоящий момент объявлены deprecated и не рекомендуются к использованию в целях безопасности. Если необходимо реализовать использование общих данных несколькими приложениями, это можно сделать через сервисы или контент-провайдеры. Подробнее можно почитать, например, здесь.

Чтобы получить значение необходимой переменной, используйте следующие методы объекта SharedPreferences:

  • getBoolean(String key, boolean defValue),
  • getFloat(String key, float defValue),
  • getInt(String key, int defValue),
  • getLong(String key, long defValue),
  • getString(String key, String defValue),
  • getStringSet(String key, Set defValues).

Второй параметр — значение, которое вернется в случае если значение по ключу key отсутствует в SharedPreferences. Также, методом getAll() можно получить все доступные значения.

Чтобы записать значение переменной необходимо:

  1. получить объект SharedPreferences.Editor выполнив метод edit() объекта класса SharedPreferences
  2. записать значение с помощью методов:
    • putBoolean(String key, boolean value),
    • putFloat(String key, float value),
    • putInt(String key, int value),
    • putLong(String key, long value),
    • putString(String key, String value),
    • putStringSet(String key, Set values)
  3. выполнить метод commit()

Также есть возможность удалить конкретное значение (remove(String key)) или все значения (clear())

Приведенный ниже код демонстрирует запись переменной типа String в хранилище:

Источник

How to save the object of the model class in Preferences

Mar 5, 2018 · 2 min read

In this article, I shall tell you about how to save the object of the model class (POJO) in preferences.

Many times, we need to save an instance of a class which has only fields like Int , Long , Float , Double , String , Boolean and has further objects of different classes which are again model classes.

In Android, SharedPreferences class can save only these:

We use the GSON library to convert the model class to JSON String and we save that JSON String into the SharedPreferences. We read back that JSON String and convert it back to the object when we want to read it.

To add GSON library, add following in our module level build.gradle:

Читайте также:  Датчики давления шин для андроид

The above line shall add the GSON library to the project.

Now we write a s ingleton class that contains the function to save the Object in SharedPreference and another method to read the object from SharedPreferences.

How to use the above methods?

First, we initialize ModelPreferencesManager in onCreate the function of our application class.

To use this, first, we create a class of our delicious Apple :

We create a bag for these apples:

Now, we create an object of Bag class:

To read it back, we use the following:

Following String is stored in Shared Preferences:

If you have any questions, then please write down a response in the response section.
If you liked this article, then please press the 👏 icon.
Thank you!
Peace! 🙂

Источник

Android SharedPreferences Save/Load Java Object Example

Android SharedPreferences object can be used to store primitive java type data such as int, long, float, boolean, String, etc. It can also be used to save or load custom java objects. This article will tell you how to save objects in SharedPreferences android example.

1. Convert Java Objects To JSON String.

Before saving objects in SharedPreferences, you need first convert the java objects into JSON string. Then save that string in the android SharedPreferences object.

We recommend Gson which is a free open source java Json library. It provides methods to convert java objects to JSON string and vice versa.

1.1 Add Gson Library In Android Project.

To use Gson in android, you need first follow the below steps to add the Gson library in the android project.

  1. Change to Project view in the android studio left panel drop-down list.
  2. Double click the build.gradle file to open it.
  3. Add the below code in the right panel dependencies section.
  • After the above configuration, click Sync Now link in the top right corner, after synchronizing, you can use the Gson library in your android code.
  • 1.2 Use Gson To Convert Java Objects To JSON String.

    1.2.1 Get Json String From Java Objects.

    Gson class’s toJson() method is used to convert the java object list to JSON string. The input parameter is the java objects List.

    1.2.2 Get Java Object Array From JSON String.

    Gson class’s fromJson() method can convert JSON string to a java object array. The first input parameter is the JSON string. The second input parameter is the returned java object array class.

    2. Save/Load Java Objects Via SharedPreferences Example.

    This example has two buttons. Click the first button will save a list of UserInfoDTO java objects’ JSON format string to the android SharedPreferences object.

    Click the second button will read the JSON String from SharedPreferences and convert the JSON string to UserInfoDTO array. It will also print each user info in the android monitor as debug log text. You can see the demo video from the link https://youtu.be/1YvY2OLGlDw.

    When you click the first button, you can use the android device monitor to see the saved android SharedPreferences file as below. Please refer Android Device Monitor Cannot Open Data Folder Resolve Method to learn how to use it.

    Источник

    Оцените статью