0Pricing
Android Academy · Урок

SharedPreferences

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

«SharedPreferences» — бесплатный урок Android Academy на CoddyKit. Это урок 4 из 6. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 6 уроков всего.

Варианты постоянного хранения данных

Android предоставляет несколько способов локального хранения данных:

  • SharedPreferences — простые пары «ключ–значение» (настройки, токены)
  • Room — структурированная база данных SQLite (сложные данные)
  • DataStore — современная асинхронная замена SharedPreferences
  • Файлы — необработанные операции ввода-вывода с файлами

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

Что такое SharedPreferences?

SharedPreferences хранит данные в виде пар «ключ–значение» в XML-файле на устройстве. Поддерживаются:

  • String
  • Int / Long / Float
  • Boolean
  • Set<String>

Данные сохраняются после перезапуска приложения и переживают изменения конфигурации (поворот экрана).

Получение экземпляра SharedPreferences

Есть два способа получить объект SharedPreferences:

// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
    "MyAppPrefs",    // file name
    Context.MODE_PRIVATE  // only your app can read it
)

// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)

Запись данных

Используйте Editor для записи значений, затем вызовите apply():

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

prefs.edit()
    .putString("username", "alice")
    .putInt("login_count", 5)
    .putBoolean("dark_mode", true)
    .apply()  // async, non-blocking — preferred over commit()

// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
    putString("username", "alice")
    apply()
}

Чтение данных

Читайте значения по ключу, указывая значение по умолчанию, если ключ не существует:

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

val username = prefs.getString("username", "Guest")  // default: "Guest"
val count = prefs.getInt("login_count", 0)            // default: 0
val darkMode = prefs.getBoolean("dark_mode", false)   // default: false

println("Hello, $username! Logins: $count. Dark: $darkMode")

Практический пример: переключатель темы

Сохраните и восстановите настройку тёмного режима:

class SettingsActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySettingsBinding
    private lateinit var prefs: SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySettingsBinding.inflate(layoutInflater)
        setContentView(binding.root)

        prefs = getSharedPreferences("settings", MODE_PRIVATE)

        // Restore saved state
        binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)

        binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
            prefs.edit().putBoolean("dark_mode", isChecked).apply()
        }
    }
}

Сохранение токена входа

Сохраняйте и проверяйте токен авторизации после перезапуска приложения:

// Save token after login
fun saveToken(token: String) {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .putString("token", token)
        .apply()
}

// Check if user is logged in
fun isLoggedIn(): Boolean {
    val token = getSharedPreferences("auth", MODE_PRIVATE)
        .getString("token", null)
    return token != null
}

// Clear on logout
fun logout() {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .remove("token")
        .apply()
}

Удаление и очистка данных

Удаляйте отдельные ключи или стирайте все данные:

  • .remove("key") — удалить одну запись
  • .clear() — удалить всё содержимое файла

Всегда вызывайте .apply() (или .commit(), если требуется синхронное подтверждение).

SharedPreferences и DataStore

SharedPreferences работает нормально, но имеет ограничения:

  • Синхронное чтение может блокировать главный поток
  • Отсутствует проверка типов

Jetpack DataStore — современная замена, полностью асинхронная и поддерживающая Kotlin Flow и проверку типов. В новых проектах отдавайте предпочтение DataStore. SharedPreferences по-прежнему широко используется и вполне подходит для небольших объёмов данных.

Быстрая проверка

Какой метод асинхронно сохраняет данные в SharedPreferences, не блокируя поток пользовательского интерфейса?

Итоги: SharedPreferences

Теперь вы умеете сохранять простые данные между запусками приложения:

  • Получение: getSharedPreferences(name, MODE_PRIVATE)
  • Запись: .edit().putString(key, value).apply()
  • Чтение: .getString(key, defaultValue)
  • Удаление: .edit().remove(key).apply()
  • Используйте apply() (асинхронный вызов), а не commit() (синхронный)

Следующий курс: архитектура приложений — ViewModel, Room и Coroutines.

Часто задаваемые вопросы

Урок «SharedPreferences» бесплатный?

Да — полный текст урока «SharedPreferences» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 6 уроков всего.

Чему я научусь в уроке «SharedPreferences»?

Сохраняйте простые данные в формате «ключ — значение» между сеансами приложения с помощью SharedPreferences. Научитесь сохранять, читать и удалять настройки. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 6.

Сколько времени занимает урок «SharedPreferences»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Коллекции Kotlin
  2. Основы RecyclerView
  3. События нажатия в RecyclerView
  4. SharedPreferences
  5. Настройки DataStore
  6. Адаптеры и DiffUtil
← Назад к Android Academy