android studio сохранение настроек приложения

Урок 33. SharedPreferences — сохранение данных в приложениях | Уроки Android Studio

В этом уроке начинаем обзор способов сохранения данных в android приложениях. Начнем с SharedPreferences.

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

Исходный код примера — под видео:

Уроки Android Studio: тут
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут

kotlin course imag770x330 4

Now in Android

kotlin course imag770x330

kotlin course image11

Broadcast Receivers

QuizApp %D0%BA%D1%83%D1%80%D1%81

Виталий, для каких целей вы снимаете новые уроки, они полностью дублируют старые, этот урок точная копия УРОКА 33 «Хранение данных. Preferences» https://www.youtube.com/watch?v=13ucu3lETlc, я понял бы еще, если бы содержимое отличалось, так нет, точная копия.
ПОЧЕМУ, на протяжение долгого времени на канале(и на сайте) не появляются новые уроки, а бездумно копируются старые, старые но с новым визуальным оформлением, здесь же ведь не кружок дизайнеров.
Это очень ПЕЧАЛЬНО, надеюсь вы одумаетесь и начнете снимать уроки, которые будет интересно просматривать.
С ув Ваш подписчик.

Спасибо за критику. Уроки обновляются для новой среды разработки. За это проголосовало много подписчиков канала в проводившемся опросе. Кроме этих уроков, на канале выходят новые серии по инструментам, дизайну, играм. Более половины публикуемых уроков — новые.

Для отправки комментария вам необходимо авторизоваться.

Источник

Полный список

— хранение данных с помощью Preferences

Хватит об Intent и Activity. Поговорим о хранении данных. В Android есть несколько способов хранения данных:

Мы начнем с самого простого – Preferences. Значения сохраняются в виде пары: имя, значение. Так же, как и например extras в Intent.

Разработаем приложение. В нем будет поле для ввода текста и две кнопки – Save и Load. По нажатию на Save мы будем сохранять значение из поля, по нажатию на Loadзагружать.

Project name: P0331_SharedPreferences
Build Target: Android 2.3.3
Application name: SharedPreferences
Package name: ru.startandroid.develop.p0331sharedpreferences
Create Activity: MainActivity

Откроем main.xml и создадим такой экран:

Поле ввода и две кнопки.

Теперь пишем код в MainActivity.java:

Определение элементов экрана, присвоение обработчиков и реализация onClick – тут все понятно и как обычно. Нам интересны методы, которые мы вызываем в onClick

saveText – сохранение данных. Сначала с помощью метода getPreferences получаем объект sPref класса SharedPreferences, который позволяет работать с данными (читать и писать). Константа MODE_PRIVATE используется для настройки доступа и означает, что после сохранения, данные будут видны только этому приложению. Далее, чтобы редактировать данные, необходим объект Editor – получаем его из sPref. В метод putString указываем наименование переменной – это константа SAVED_TEXT, и значение – содержимое поля etText. Чтобы данные сохранились, необходимо выполнить commit. И для наглядности выводим сообщение, что данные сохранены.

Все сохраняем, запускаем приложение.

Для начала, давайте убедимся, что сохранение в принципе нужно. Введите какой-нить текст в поле ввода

20111108 L0033 L Data

и не нажимая кнопку Save закройте приложение кнопкой Назад.

Теперь найдите приложение в общем списке приложений эмулятора

20111108 L0033 L AppList

Поле ввода пустое. То, что мы вводили – пропало при закрытии программы. Нажатие на Load тоже ничего не даст – мы ничего не сохраняли.

20111108 L0033 L Data2

Давайте попробуем сохранять. Снова введите значение и нажмите Save.

20111108 L0033 L saved

Значение сохранилось в системе.

Теперь закроем приложение (Назад), снова откроем и нажмем Load. Значение считалось и отобразилось.

20111108 L0033 L loaded

Давайте сделаем так, чтобы сохранение и загрузка происходили автоматически при закрытии и открытии приложения и не надо было жать кнопки. Для этого метод loadText будем вызывать в onCreate.

(Добавляете только строку 8)

Все сохраним, запустим. Теперь можно вводить данные, закрывать приложение, снова открывать и данные не потеряются. Кнопки Save и Load также работают. В какой момент сохранять данные в ваших приложениях – решать только вам. По нажатию кнопки, при закрытии программы или еще по какому-либо событию. Главное – теперь вы это умеете.

Еще немного слов по этой теме.

Обратите внимание, что в пути к файлу используется наш package.

Теперь разберемся, откуда взялось наименование файла MainActivity.xml. Кроме метода getPreferences, который мы использовали, есть метод getSharedPreferences. Он выполняет абсолютно те же функции, но позволяет указать имя файла для хранения данных. Т.е., например, если бы мы в saveText использовали для получение SharedPreferences такой код:

То данные сохранились бы в файле MyPref.xml, а не в MainActivity.xml.

Теперь если мы посмотрим исходники метода getPreferences, то видим следующее:

Используется метод getSharedPreferences, а в качестве имени файла берется имя класса текущего Activity. Отсюда и появилось имя файла MainActivity.xml.

— используете getPreferences, если работаете с данными для текущего Activity и не хотите выдумывать имя файла.

Кстати, в File Explorer вы можете видеть юниксовые rwx-права доступа к файлу. Попробуйте при сохранении данных использовать не MODE_PRIVATE, а MODE_WORLD_READABLE или MODE_WORLD_WRITEABLE и посмотрите, как будут меняться права.

Полный код MainActivity.java:

На следующем уроке:

— хранение данных с помощью SQLite

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Android studio сохранение настроек приложения

Сохранение данных с помощью Shared Preferences происходит благодаря тому, что при сохранении данных таким образом, приложение создает специальный xml файл, где будет храниться нужная информация, и при нужде получить сохраненные данные, программа будет обращаться к этому xml файлу. Файл храниться в системе устройства по адресу /data/data/НАЗВАНИЕ_ПРОЕКТА/shared_prefs.

Интерфейс для сохранения настроек Shared Preferences довольно прост в использовании. Для этого вызывается специальный метод под названием getPreferences(). По отношению к введенным данным можно выбрать 3 уровня доступности:

Для того, чтобы извлечь сохраненные данные, нужно обратиться к ним с помощью команды get (), ссылаясь на необходимые пары-значения.

Итак, начнем делать наше приложение, описанное вначале. Создаем новый проект, выбираем Blank Activity. Интерфейс программы будет иметь два поля для ввода текста и две кнопки. Открываем файл activity_main.xml и добавляем в него следующее:

Теперь открываем MainActivity.java и добавляем этот код (объяснения там же):

Как видите, при сохранении и загрузке сохраненных данных будет высвечиваться Toast сообщение с информацией о выполненной операции.

Теперь осталось только протестировать наше приложение:

shp1

Похоже на чудо, но оно работает!

Таким образом, в этом уроке мы научились как в Android программировании выполнять сохранение данных приложения с помощью стандартного интерфейса под названием Shared Preferences. Надеюсь у вас все получилось, удачи в начинаниях.

Также можете переходить к изучению SQLite Database.

Источник

Android с нуля: как хранить данные приложения локально

Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)

Когда доходит до сохранения данных приложений локально, разработчики Android определённо избалованы выбором. Помимо прямого доступа к внутренним и внешним областям хранения Android-устройства, платформа Android предлагает базы данных SQLite для хранения реляционных данных и специальные файлы для хранения пар ключ-значение. Более того, приложения для Android также могут использовать сторонние базы данных, которые предлагают поддержку NoSQL.

В этом уроке я покажу вам, как использовать все эти параметры хранения в приложениях для Android. Я также помогу вам понять, как выбрать наиболее подходящий вариант хранения данных.

Вам проще учиться по видео? Почему бы не посмотреть наш курс:

1. Хранение пар ключ-значение

Как вы видите из кода выше, второй параметр всех методов get*() ожидает значение по-умолчанию, которое является значением, которое должно быть возвращено, если ключ не существует и файле настроек.

Обратите внимание, что файлы настроек ограничены только строками и примитивными типами данных. Если вы хотите сохранить более сложные типы данных или двоичные данные, вы должны выбрать другой вариант хранения.

2. Использование базы данных SQLite

Каждое приложение для Android может создавать и использовать базы данных SQLite для хранения больших объемов структурированных данных. Как вы уже знаете, SQLite не только лёгкая, но и очень быстрая. Если у вас есть опыт работы с системами управления реляционными базами данных и вы знакомы как с SQL, что является сокращением для Structured Query Language, и JDBC, что является сокращением для Java Database Connectivity, это может быть предпочтительным вариантом хранения.

После создания базы данных вы можете использовать метод execSQL() для запуска SQL-инструкций. В следующем коде показано, как использовать оператор SQL CREATE TABLE для создания таблицы названной user, которая имеет три столбца:

Когда объекты ContentValues готовы, вы можете передать их методу insert() вместе с именем таблицы.

3. Использование внутреннего хранилища

Каждое приложение Android имеет свой собственный внутренний каталог хранения, взаимодействующий с ним, в котором приложение может хранить текстовые и двоичные файлы. Файлы внутри этого каталога недоступны для пользователя или других приложений, установленных на устройстве пользователя. Они также автоматически удаляются, когда пользователь удаляет приложение.

Чтобы получить ссылку на файл внутри каталога, вы можете передать имя файла вместе с указанным вами расположением. Например, вот как вы получите ссылку на файл alice.csv:

С этого момента вы можете использовать свои знания о классах и методах I/O (ввода/вывода) Java для чтения или записи в файл. В следующем фрагменте кода показано, как использовать объект FileOutputStream и метод write() для записи в файл:

Поскольку внутреннее хранилище устройств Android обычно фиксировано и часто довольно ограничено, некоторые устройства Android поддерживают внешние носители данных, такие как съемные микро SD-карты. Я рекомендую использовать этот вариант хранения для больших файлов, таких как фотографии и видео.

Как только вы убедитесь, что внешнее хранилище доступно, вы можете получить путь к файлу внешнего хранилища для своего приложения, вызвав метод getExternalFilesDir() и передав null в качестве аргумента. Затем вы можете использовать путь для ссылки на файлы внутри каталога. Например, вот как вы можете ссылаться на файл с именем bob.jpg в каталоге внешнего хранилища приложения:

Вот как вы можете ссылаться на файл bob.jpg в каталоге общих изображений:

Заключение

Теперь вы знаете, как максимально использовать возможности локального хранилища, предоставляемые Android SDK. Независимо от выбранного вами варианта хранения операции чтения/записи могут потребовать много времени, если задействованы большие объемы данных. Поэтому, чтобы убедиться, что основной поток пользовательского интерфейса всегда остается отзывчивым, вы должны рассмотреть возможность запуска операций в другом потоке.

Чтобы узнать больше о сохранении данных приложения локально, обратитесь к официальному руководству API хранения данных.

Источник

SharedPreferences

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

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

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

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

Для любознательных могу добавить, что файлы настроек хранятся в каталоге /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. Поэтому, даже после удаления файла, он может заново воссоздаться. Вообще удалять файл не рекомендуется. Он автоматически удалится при удалении самой программы.

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

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

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

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

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

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

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

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

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

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

getDefaultSharedPreferences()

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

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

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

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • android studio сохранение данных при закрытии приложения
  • android studio создание приложения с нуля