SharedPreferences
Trwale przechowuj proste dane w formie klucz-wartość między sesjami aplikacji za pomocą SharedPreferences. Naucz się zapisywać, odczytywać i usuwać preferencje.
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) zamiastcommit()(synchronicznego)
Następny kurs: architektura aplikacji — ViewModel, Room i Coroutines.
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
- Kolekcje w Kotlinie
- Podstawy RecyclerView
- Obsługa kliknięć w RecyclerView
- SharedPreferences
- Preferencje DataStore
- Adaptery i DiffUtil