Sharedpreferences android studio arraylist

Содержание
  1. Сохранить ArrayList в SharedPreferences
  2. 30 ответов
  3. SharedPreferences
  4. Сохранение значений параметров
  5. Чтение значений параметров
  6. Очистка значений
  7. Методы getStringSet() и putStringSet()
  8. Удаление файла
  9. Метод getPreferences() — Сохранение состояния активности
  10. Сохранение настроек на SD-карту
  11. Я у тебя первый?
  12. Запомнить пользователя
  13. Запомнить состояние переключателей
  14. getDefaultSharedPreferences()
  15. Удаляем файл настроек
  16. WrathChaos / SharedPreferenceUsage.md
  17. This comment has been minimized.
  18. Dencer commented May 30, 2018
  19. This comment has been minimized.
  20. nathan-mersha commented Jul 4, 2018
  21. This comment has been minimized.
  22. samirsamedow commented Oct 12, 2018 •
  23. This comment has been minimized.
  24. pbwauyo commented Mar 2, 2019
  25. This comment has been minimized.
  26. amanaggarwal1 commented Jul 21, 2020
  27. This comment has been minimized.
  28. MadhavSapkota commented Aug 19, 2020
  29. This comment has been minimized.
  30. WrathChaos commented Aug 19, 2020
  31. This comment has been minimized.
  32. oremlawi commented Oct 26, 2020
  33. This comment has been minimized.
  34. WrathChaos commented Oct 26, 2020
  35. This comment has been minimized.
  36. deva-25 commented Apr 23, 2021
  37. This comment has been minimized.
  38. thanhdat410 commented Jul 11, 2021
  39. This comment has been minimized.
  40. WrathChaos commented Jul 13, 2021
  41. Sharedpreferences android studio arraylist

Сохранить ArrayList в SharedPreferences

у меня есть ArrayList с пользовательскими объектами. Каждый пользовательский объект содержит множество строк и чисел. Мне нужен массив, чтобы придерживаться, даже если пользователь покидает действие, а затем хочет вернуться позже, однако мне не нужен массив, доступный после того, как приложение было полностью закрыто. Я сохраняю много других объектов таким образом, используя SharedPreferences но я не могу понять, как сохранить весь мой массив таким образом. Возможно ли это? Может быть!—1—> это не путь об этом? Есть ли более простой метод?

30 ответов

после API 11 SharedPreferences Editor принимать Sets . Вы можете преобразовать свой список в HashSet или что-то подобное и хранить его так. Когда вы прочитаете его обратно, преобразуйте его в ArrayList , а если необходимо и вы хорошо идти.

вы также можете сериализовать свой ArrayList а затем сохранить / прочитать его в / из SharedPreferences . Ниже приведено решение:

EDIT:
Хорошо, Ниже приведено решение для сохранения ArrayList как сериализованный объект SharedPreferences а затем прочитайте его из SharedPreferences.

поскольку API поддерживает только хранение и извлечение строк в / из SharedPreferences (после API 11, его проще), мы должны сериализовать и де-сериализовать объект ArrayList, который имеет список задач в строку.

на addTask() метод класса TaskManagerApplication, мы должны получить экземпляр общего предпочтения, а затем сохранить сериализованный ArrayList с помощью putString() метод:

аналогично мы должны получить список задач из предпочтения в onCreate() способ:

Источник

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 (обратите внимание на выделенный текст).

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

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

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

Читайте также:  Sirf atlas v at551 android

Источник

WrathChaos / SharedPreferenceUsage.md

This comment has been minimized.

Copy link Quote reply

Dencer commented May 30, 2018

This comment has been minimized.

Copy link Quote reply

nathan-mersha commented Jul 4, 2018

This comment has been minimized.

Copy link Quote reply

samirsamedow commented Oct 12, 2018 •

Thanks for the share. but how to delete saved list?. editor.remove(key) not worked

This comment has been minimized.

Copy link Quote reply

pbwauyo commented Mar 2, 2019

Thanks for the share. but how to delete saved list?. editor.remove(key) not worked

This comment has been minimized.

Copy link Quote reply

amanaggarwal1 commented Jul 21, 2020

great work there

This comment has been minimized.

Copy link Quote reply

MadhavSapkota commented Aug 19, 2020

How to display that saved array in list view??

This comment has been minimized.

Copy link Quote reply

WrathChaos commented Aug 19, 2020

How to display that saved array in list view??

You need to google it for that 🙂 Not the right place to ask 🙂

This comment has been minimized.

Copy link Quote reply

oremlawi commented Oct 26, 2020

How to work with ArrayList ?

Note that CustomClass has Date, Int and String fields

This comment has been minimized.

Copy link Quote reply

WrathChaos commented Oct 26, 2020

Hey @oremlawi,
I really could not understand your question. Can you explain it a bit?

This comment has been minimized.

Copy link Quote reply

deva-25 commented Apr 23, 2021

Am using it on a fragment page. But the data is not loading back.

This comment has been minimized.

Copy link Quote reply

thanhdat410 commented Jul 11, 2021

Phenomenal !! U saved me

This comment has been minimized.

Copy link Quote reply

WrathChaos commented Jul 13, 2021

I suggest you to write a simple util class to use them a much better way.

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Sharedpreferences android studio arraylist

//сохранение и чтение массива ArrayList

//сохранение и чтение Map (скопипастил,не использовал пока)
//***********************************************************************************************
public static void saveMap(Context context, String key,Map inputMap) <
SharedPreferences pSharedPref = PreferenceManager.getDefaultSharedPreferences(context);
if (pSharedPref != null) <
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
SharedPreferences.Editor editor = pSharedPref.edit();
editor.remove(key).commit();
editor.putString(key, jsonString);
editor.commit();
>
>

public static Map loadMap(Context context, String k) <
Map outputMap = new HashMap ();
SharedPreferences pSharedPref = PreferenceManager.getDefaultSharedPreferences(context);
try <
if (pSharedPref != null) <
String jsonString = pSharedPref.getString(k, (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator keysItr = jsonObject.keys();
while(keysItr.hasNext()) <
String key = keysItr.next();
String value = (String ) jsonObject.get(key);
outputMap.put(key, value);
>
>
>catch(Exception e) <
e.printStackTrace();
>
return outputMap;
>
//***********************************************************************************************

public SharedPreferences mSettings; // сохранялка
public final String APP_PREFERENCES = «mysettings»; // файл сохранялки

Источник

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