Сохраняем настройки

Очень часто требуется сохранить какие-то настройки. Простой пример — девочка с удовольствием пользовалась нашей программой Счётчик ворон и вертела головой в поисках очередной птицы. Но вот незадача — когда девочка вечером закрывала своё приложение, то на следующий день счётчик обнулялся. А так хотелось узнать, сколько ворон можно насчитать за месяц. Но однажды в дождливый осенний день она встретила рыжее чудо. Впрочем, это уже совсем другая история.
Самый простой способ, который приходит в голову — сбросить данные в файл, а при запуске приложения считывать необходимые данные из файла. Второй вариант — работать с базой данных и хранить настройки там.
Рассмотрим сначала второй вариант. Хранить данные в базе данных не всегда оправдано, если данных не слишком много, они простые и нам не нужно анализировать данные на предмет, сколько мышек поймал котик в прошлом году и сколько часов он спал в январе и феврале.
Первый вариант с файлами хорош, например, для сохранения больших текстовых заметок. Естественно, и для простых данных мы тоже можем использовать файлы. Записали что-то в файл, а потом открыли его и считали данные.
На самом деле нет необходимости изобретать свой велосипед и придумывать свою структуру для хранения данных. В Android существует класс SharedPreferences (Общие настройки), разработанный специально для этих целей. Приложение автоматически создаёт файл в своей папке и хранит простые данные в виде «ключ — значение». Весь процесс создания, открытия, чтения файла оптимизирован и избавляет вас от головной боли.
Общие настройки поддерживают базовые типы boolean, String, float, long и int, что делает их идеальным средством для быстрого сохранения значений по умолчанию, переменных экземпляра класса, текущего состояния UI и пользовательских настроек. Они чаще всего используются для обеспечения постоянства данных между пользовательскими сессиями и доступа к ним компонентов приложения.
Сохранение значений параметров
Если у вас сохранился старый проект по подсчёту ворон, то можете снова его открыть и добавить новый код. Либо заново создайте проект по памяти, заодно проверите, как усвоили урок и сможете ли вы самостоятельно создать проект с нуля, не заглядывая на сайт за подсказкой.
Создаём переменную, представляющую экземпляр класса SharedPreferences, который отвечает за работу с настройками:
private lateinit var prefs: SharedPreferences override fun onCreate(savedInstanceState: Bundle?)
Вы передаёте в указанный метод getSharedPreferences() имя вашего файла (файл будет создан автоматически) и стандартное разрешение по умолчанию MODE_PRIVATE — только приложение имеет доступ к настройкам. Если вам необходимо, вы можете создать несколько подобных файлов настроек.
Немного опередим события и представим, что приложение запущено, и мы считаем ворон весь день. Когда мы закрываем приложение, то нам необходимо сохранить информацию в «Общих настройках». Обычно для этих целей используют методы onPause() или onStop().
Чтобы внести изменения в настройки, нужно использовать класс SharedPreferences.Editor. Получить объект Editor можно через вызов метода edit() объекта SharedPreferences. После того, как вы внесли все необходимые изменения, вызовите метод apply(), чтобы изменения вступили в силу.
override fun onPause() < super.onPause() // Запоминаем данные val editor = prefs.edit() editor.putInt(APP_PREFERENCES_COUNTER, counter).apply() >
Теперь при закрытии программы значение счётчика автоматически запишется в файл. При повторном запуске приложения нам уже не нужно инициализировать счётчик со значением 0. Мы можем прочитать сохранённое значение и использовать его для счётчика, чтобы продолжить подсчёт. Сделаем это в методе onResume().
override fun onResume() < super.onResume() if(prefs.contains(APP_PREFERENCES_COUNTER))< // Получаем число из настроек counter = prefs.getInt(APP_PREFERENCES_COUNTER, 0) // Выводим на экран данные из настроек infoTextView.text = "Я насчитал $counter ворон" >>
Мы проверяем сначала наличие ключа APP_PREFERENCES_COUNTER, а затем извлекаем из ключа его значение.
Вот и всё. Небольшие изменения в коде сделали программу продвинутой. Теперь вы можете спокойно закрывать и открывать программу, ваши данные не будут потеряны. При желании вы можете добавить кнопку для сброса счётчика. Это вам в качестве домашнего задания.
В теории показаны дополнительные примеры и даны подробные сведения об использовании «Общих настроек». Вам следует хорошенько разобраться в этом механизме, так как он часто используется на практике. Более того, некоторые программисты предпочитают использовать «Общие настройки» вместо базы данных, если это позволяет логика программы, так как это работает быстрее и потребляет меньше ресурсов. Выбор за вами.
Вместо послесловия
Не волнуйтесь, с котёнком всё в порядке. Девочка подобрала его и принесла домой. И добрая девочка по-прежнему пользуется нашей программой «Счётчик ворон». Наверное, биологом станет или ветеринаром.
При написании статьи использовались иллюстрации Рины З..
Исходный код (Kotlin)
Код класса активности.
// Если этот код работает, его написал Александр Климов, // а если нет, то не знаю, кто его писал. package ru.alexanderklimov.counter import android.content.Context import android.content.SharedPreferences import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() < private lateinit var prefs: SharedPreferences private val APP_PREFERENCES_COUNTER = "counter" private var counter: Int = 0 override fun onCreate(savedInstanceState: Bundle?) < super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) prefs = getSharedPreferences("settings", Context.MODE_PRIVATE) crowButton.setOnClickListener < counter = ++counter infoTextView.text = "Я насчитал $counter ворон" >> override fun onPause() < super.onPause() // Запоминаем данные val editor = prefs.edit() editor.putInt(APP_PREFERENCES_COUNTER, counter).apply() >override fun onResume() < super.onResume() if(prefs.contains(APP_PREFERENCES_COUNTER))< // Получаем число из настроек counter = prefs.getInt(APP_PREFERENCES_COUNTER, 0) // Выводим на экран данные из настроек infoTextView.text = "Я насчитал $counter ворон" >> >
Исходный код (Java)
Код класса активности
// Если этот код работает, его написал Александр Климов, // а если нет, то не знаю, кто его писал. package ru.alexanderklimov.counter; import android.content.Context; import android.content.SharedPreferences; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends ActionBarActivity < private int mCounter; private TextView mInfoTextView; // имя файла настройки public static final String APP_PREFERENCES = "mysettings"; public static final String APP_PREFERENCES_COUNTER = "counter"; private SharedPreferences mSettings; public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE); mInfoTextView = (TextView) findViewById(R.id.textViewInfo); >public void onClick(View v) < // Выводим на экран mInfoTextView.setText("Я насчитал " + ++mCounter + " ворон"); >@Override protected void onResume() < super.onResume(); if (mSettings.contains(APP_PREFERENCES_COUNTER)) < // Получаем число из настроек mCounter = mSettings.getInt(APP_PREFERENCES_COUNTER, 0); // Выводим на экран данные из настроек mInfoTextView.setText("Я насчитал " + mCounter + " ворон"); >> @Override protected void onPause() < super.onPause(); // Запоминаем данные SharedPreferences.Editor editor = mSettings.edit(); editor.putInt(APP_PREFERENCES_COUNTER, mCounter); editor.apply(); >>
Где Android Studio хранит все свои настройки в Linux
Хочу почистить кеши, а может даже переустановить студию. Какие папки нужно почистить, чтобы избавиться от мусора, накопленного за время пользования? знаю про ~/.android ~/.AndroidStudio
Отслеживать
задан 22 мар 2019 в 7:55
Александр Тарабрин Александр Тарабрин
1,373 1 1 золотой знак 11 11 серебряных знаков 21 21 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
- ~/.AndroidStudio/, конфиги и система
- ~/.android
- ~/.local/share/applications/jetbrains-studio.desktop
- Стандартная папка для студии — /usr/local/, или /opt/ для всех.
- SDK обычно в ~/Android.
В дополнение глянуть: whereis android
Отслеживать
ответ дан 22 мар 2019 в 8:06
149 1 1 серебряный знак 9 9 бронзовых знаков
- linux
- android-studio
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Где в облаке хранятся настройки приложений android?
Суть такая: после очередного сброса android смартфона и подключения google аккаунта, смартфон начал скачивать из облака настройки приложений по состоянию на. январь 2014 — т.е. на тот момент когда я отключил все синхронизации android кроме контактов и календаря. Вопрос: где найти эти сохраненные в облаке данные чтобы уничтожить?
В промежутке между сброс и входом в гугл аккаунт на смартфоне — зашел в google play с ПК и удалил оттуда устройство. Но после входа — опять начал тянуть эти старые настройки.
https://www.google.com/settings/dashboard здесь ничего не нашел.
- Вопрос задан более трёх лет назад
- 3615 просмотров
Где хранятся настройки APK приложений Android?
Какой файл отвечает за настройки приложения и где он храниться (в прошивке среди системных файлов телефона или на SD-карте)?
Голосование за лучший ответ
всегда в телефоне, в корневой папке приложения должен вроди быть
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.