Android Academy · Lekcja

SharedPreferences

Trwale przechowuj proste dane w formie klucz-wartość między sesjami aplikacji za pomocą SharedPreferences. Naucz się zapisywać, odczytywać i usuwać preferencje.

Lekcja 4 z 611 kroki

SharedPreferences to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 z 6. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 6 lekcji w sumie.

Opcje trwałego przechowywania danych

Android oferuje kilka sposobów lokalnego przechowywania danych:

  • SharedPreferences — proste pary klucz-wartość (ustawienia, tokeny)
  • Room — strukturalna baza danych SQLite (złożone dane)
  • DataStore — nowoczesny asynchroniczny zamiennik SharedPreferences
  • Pliki — bezpośredni zapis i odczyt plików

SharedPreferences doskonale nadaje się do przechowywania prostych ustawień i preferencji użytkownika.

Czym jest SharedPreferences?

SharedPreferences przechowuje dane jako pary klucz-wartość w pliku XML na urządzeniu. Obsługuje:

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

Dane zachowują się po ponownym uruchomieniu aplikacji i przetrwają zmiany konfiguracji (obrót ekranu).

Uzyskiwanie instancji SharedPreferences

Istnieją dwa sposoby uzyskania obiektu 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)

Zapisywanie danych

Użyj obiektu Editor do zapisania wartości, a następnie wywołaj 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()
}

Odczytywanie danych

Odczytuj wartości według klucza, podając wartość domyślną, jeśli klucz nie istnieje:

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")

Praktyczny przykład: przełącznik motywu

Zapisz i przywróć ustawienie trybu ciemnego:

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()
        }
    }
}

Zapisywanie tokenu logowania

Przechowuj i sprawdzaj token uwierzytelniania po ponownym uruchomieniu aplikacji:

// 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()
}

Usuwanie i czyszczenie danych

Usuwaj określone klucze lub wyczyść wszystkie dane:

  • .remove("key") — usuwa jeden wpis
  • .clear() — usuwa wszystko z pliku

Zawsze wywołuj .apply() (lub .commit(), jeśli potrzebujesz synchronicznego potwierdzenia).

SharedPreferences a DataStore

SharedPreferences działa poprawnie, ale ma pewne ograniczenia:

  • Synchroniczne odczyty mogą blokować wątek główny
  • Brak bezpieczeństwa typów

Jetpack DataStore to nowoczesny zamiennik — w pełni asynchroniczny, obsługujący Kotlin Flow i bezpieczeństwo typów. W nowych projektach preferuj DataStore. SharedPreferences nadal jest powszechnie używany i doskonale nadaje się do niewielkich ilości danych.

Szybkie sprawdzenie

Która metoda zapisuje dane w SharedPreferences asynchronicznie, bez blokowania wątku interfejsu użytkownika?

Podsumowanie: SharedPreferences

Potrafisz teraz zachowywać proste dane między uruchomieniami aplikacji:

  • Pobieranie za pomocą getSharedPreferences(name, MODE_PRIVATE)
  • Zapisywanie: .edit().putString(key, value).apply()
  • Odczytywanie: .getString(key, defaultValue)
  • Usuwanie: .edit().remove(key).apply()
  • Używaj apply() (asynchronicznego) zamiast commit() (synchronicznego)

Następny kurs: architektura aplikacji — ViewModel, Room i Coroutines.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
36
Lekcje
152

Często zadawane pytania

Czy lekcja „SharedPreferences” jest bezpłatna?

Tak — pełny tekst „SharedPreferences” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 6 lekcji w sumie.

Co nauczysz się w „SharedPreferences”?

Trwale przechowuj proste dane w formie klucz-wartość między sesjami aplikacji za pomocą SharedPreferences. Naucz się zapisywać, odczytywać i usuwać preferencje. Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 6.

Ile czasu zajmuje lekcja „SharedPreferences”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kolekcje w Kotlinie
  2. Podstawy RecyclerView
  3. Obsługa kliknięć w RecyclerView
  4. SharedPreferences
  5. Preferencje DataStore
  6. Adaptery i DiffUtil
← Powrót do Android Academy