У меня есть ArrayList
с пользовательскими объектами. Каждый пользовательский объект содержит различные строки и числа. Мне нужно, чтобы массив оставался без присмотра, даже если пользователь покидает действие и затем хочет вернуться позже, однако мне не нужен массив, доступный после того, как приложение было полностью закрыто. Таким способом я сохраняю множество других объектов, SharedPreferences
но не могу понять, как сохранить весь массив таким образом. Это возможно? Может быть SharedPreferences
, не так ли? Есть ли более простой способ?
android
arraylist
sharedpreferences
ryandlf
источник
источник
Ответы:
После API 11
SharedPreferences Editor
принятьSets
. Вы можете преобразовать свой Список вHashSet
или что-то подобное и сохранить его таким образом. Когда вы прочитаете его обратно, преобразуйте его вArrayList
, сортируйте, если нужно, и все готово.Вы также можете сериализовать свой
ArrayList
и затем сохранить / прочитать его в / изSharedPreferences
. Ниже приведено решение:РЕДАКТИРОВАТЬ:
Хорошо, ниже приведено решение для сохранения в
ArrayList
виде сериализованного объектаSharedPreferences
и последующего чтения его из SharedPreferences.Поскольку API поддерживает только сохранение и извлечение строк в / из SharedPreferences (после API 11, это проще), мы должны сериализовать и десериализовать объект ArrayList, который имеет список задач в строку.
В
addTask()
методе класса TaskManagerApplication мы должны получить экземпляр общего предпочтения и затем сохранить сериализованный ArrayList, используяputString()
метод:Точно так же мы должны получить список задач из предпочтения в
onCreate()
методе:Вы можете получить
ObjectSerializer
класс из проекта Apache Pig ObjectSerializer.javaисточник
putStringSet
было добавлено в API 11. Большинство современных программистов ориентированы на аренду API 8 (Froyo).scoreEditor
?Использование этого объекта -> TinyDB - Android-Shared-Preferences-Turbo очень просто.
класть
получить
ОБНОВИТЬ
Некоторые полезные примеры и устранение неполадок могут быть найдены здесь: Android Shared Preference TinyDB putListObject frunction
источник
tinydb.putList()
Посмотрите примеры на связанной странице.Сохранение
Array
вSharedPreferences
:Загрузка
Array
данных изSharedPreferences
источник
ArrayList
в себе,SharedPrefeneces
вы моглиmEdit1.clear()
бы избежать этого.Вы можете преобразовать его
JSON String
и сохранить строку вSharedPreferences
.источник
Как сказал @nirav, лучшее решение - сохранить его в sharedPrefernces как текст json с помощью служебного класса Gson. Ниже пример кода:
источник
Привет друзья, я получил решение вышеуказанной проблемы без использования
Gson
библиотеки. Здесь я размещаю исходный код.1. Переменная декларация т.е.
2. Переменная инициализация т.е.
3. Сохраните значение в sharedPreference, используя
packagesharedPreferences()
:4. Получить значение sharedPreference с помощью
retriveSharedValue()
:Я надеюсь, что это будет полезно для вас ...
источник
String
с?ЯВА:
Котлин
источник
Android SharedPreferances позволяет вам сохранять примитивные типы (Boolean, Float, Int, Long, String и StringSet, доступные с API11) в памяти в виде XML-файла.
Ключевой идеей любого решения было бы преобразование данных в один из этих примитивных типов.
Я лично люблю конвертировать мой список в формат json, а затем сохранять его как строку в значении SharedPreferences.
Чтобы использовать мое решение, вам нужно добавить Google Gson lib.
В Gradle просто добавьте следующую зависимость (пожалуйста, используйте последнюю версию Google):
Сохраните данные (где HttpParam - ваш объект):
Получить данные (где HttpParam - ваш объект):
источник
Это ваше идеальное решение .. попробуйте,
источник
Вы также можете преобразовать массив в строку и сохранить его в настройках
Вы можете сохранить Arraylist после преобразования его в строку, используя
convertToString
метод, получить строку и преобразовать ее в массив, используяconvertToArray
После API 11 вы можете сохранить набор непосредственно в SharedPreferences, хотя !!! :)
источник
Для String, int, boolean лучшим выбором будут sharedPreferences.
Если вы хотите хранить ArrayList или любые сложные данные. Лучшим выбором была бы Бумажная библиотека.
Добавить зависимость
Инициализировать бумагу
Должен быть инициализирован один раз в Application.onCreate ():
Сохранить
Загрузка данных
Используйте значения по умолчанию, если объект не существует в хранилище.
Ну вот.
https://github.com/pilgr/Paper
источник
Я прочитал все ответы выше. Это все правильно, но я нашел более простое решение, как показано ниже:
Сохранение списка строк в общих настройках >>
}
и для получения списка строк из общих настроек >>
Вот
Constants.APP_PREFS
имя файла, который нужно открыть; не может содержать разделители пути.источник
Также с Kotlin:
источник
лучший способ - преобразовать строку JSOn с помощью GSON и сохранить эту строку в SharedPreference. Я также использую этот способ для кэширования ответов.
источник
Вы можете сохранить список строк и пользовательских массивов с помощью библиотеки Gson.
=> Сначала вам нужно создать функцию для сохранения списка массивов в SharedPreferences.
=> Вам нужно создать функцию для получения списка массивов из SharedPreferences.
=> Как вызвать функцию сохранения и получения списка массивов.
=> Не забудьте добавить библиотеку gson в свой уровень приложения build.gradle.
реализация 'com.google.code.gson: gson: 2.8.2'
источник
Вы можете ссылаться на функции serializeKey () и deserializeKey () из класса SharedPreferencesTokenCache FacebookSDK. Он преобразует поддерживаемый тип в объект JSON и сохраняет строку JSON в SharedPreferences . Вы можете скачать SDK отсюда
источник
Почему бы вам не прикрепить свой arraylist к классу Application? Оно разрушается только тогда, когда приложение действительно убито, поэтому оно будет сохраняться, пока приложение доступно.
источник
Лучший способ, который мне удалось найти, - это создать двумерный массив ключей и поместить пользовательские элементы массива в двумерный массив ключей, а затем получить его через двумерный массив при запуске. Мне не понравилась идея использования набора строк, потому что большинство пользователей Android все еще используют Gingerbread, а использование набора строк требует соты.
Пример кода: здесь ditor - это общий преф-редактор, а rowitem - мой пользовательский объект.
источник
следующий код является принятым ответом, с еще несколькими строками для новых людей (я), например. показывает, как преобразовать объект заданного типа обратно в arrayList, и дополнительные рекомендации по поводу того, что стоит перед «.putStringSet» и «.getStringSet». (спасибо, злобный)
источник
источник
не забудьте реализовать Serializable:
https://stackoverflow.com/a/7635154/4639974
источник
Вы можете использовать сериализацию или библиотеку Gson для преобразования списка в строку и наоборот, а затем сохранить строку в настройках.
Используя библиотеку Google Gson:
Используя сериализацию Java:
источник
Этот метод используется для хранения / сохранения списка массивов: -
Этот метод используется для получения списка массивов:
источник
Вы можете преобразовать его в
Map
объект, чтобы сохранить его, а затем изменить значения обратно на ArrayList при полученииSharedPreferences
.источник
Используйте этот пользовательский класс:
Как пользоваться:
источник
это должно работать:
их, чтобы поймать это просто
меня устраивает.
источник
Мой класс утилит для сохранения списка в
SharedPreferences
С помощью
,
Полный код моих утилит // проверьте с помощью примера в коде активности
источник
Я использовал тот же способ сохранения и извлечения строки, но здесь с arrayList я использовал HashSet в качестве посредника
Чтобы сохранить arrayList в SharedPreferences, мы используем HashSet:
1- мы создаем переменную SharedPreferences (в месте, где изменение происходит с массивом)
2 - конвертируем arrayList в HashSet
3 - тогда мы ставим строку Set и применяем
4 - вы получаете StStringSet внутри HashSet и воссоздаете ArrayList для установки HashSet.
источник
источник
Все вышеприведенные ответы верны. :) Я сам использовал один из них для моей ситуации. Однако, когда я прочитал вопрос, я обнаружил, что ОП на самом деле говорит о сценарии, отличном от названия этого поста, если я не понял его неправильно.
«Мне нужно, чтобы массив оставался без присмотра, даже если пользователь покидает действие, а затем хочет вернуться позже»
Он на самом деле хочет, чтобы данные сохранялись до тех пор, пока приложение не будет открыто, независимо от смены экрана пользователем в приложении.
«Однако мне не нужен массив, доступный после полного закрытия приложения»
Но как только приложение закрыто, данные не должны сохраняться. Поэтому я чувствую, что использую
SharedPreferences
не является оптимальным способом для этого.Что можно сделать для этого требования, так это создать класс, который расширяет
Application
класс.Используя сеттер и геттер, вы можете получить доступ к ArrayList из любой точки приложения. И что самое приятное, когда приложение закрывается, нам не нужно беспокоиться о сохранении данных. :)
источник