Preferences DataStore
Reaktywnie przechowuj ustawienia w formacie klucz–wartość
Preferences DataStore to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. 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 4 lekcji w sumie.
Preferences DataStore
Preferences DataStore przechowuje proste pary klucz-wartość, podobnie jak SharedPreferences, ale korzysta z nowoczesnego asynchronicznego API. Nie wymusza schematu ani bezpieczeństwa typów dla całego obiektu.
Do wartości uzyskuje się dostęp za pomocą typowanych kluczy.
Tworzenie DataStore
Tworzysz jedną instancję DataStore dla każdego pliku, używając delegata właściwości preferencesDataStore na najwyższym poziomie pliku Kotlin. Wartość name staje się nazwą pliku na dysku.
import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences
val Context.dataStore: DataStore<Preferences> by
preferencesDataStore(name = "settings")Dlaczego delegat na najwyższym poziomie
Delegat gwarantuje, że w procesie istnieje dokładnie jedna instancja DataStore dla danej nazwy pliku. Utworzenie dwóch instancji dla tego samego pliku powoduje błąd, ponieważ konkurowałyby o te same dane.
Zadeklarowanie go jako rozszerzenia Context na najwyższym poziomie sprawia, że pozostaje singletonem.
Klucze preferencji
Każda wartość potrzebuje typowanego klucza. Klucz określa nazwę wpisu i jego typ. Funkcje pomocnicze tworzą klucze dla każdego obsługiwanego typu.
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")Obsługiwane typy kluczy
Preferences DataStore obsługuje następujące podstawowe typy kluczy:
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey,longPreferencesKey,floatPreferencesKey,doublePreferencesKeystringSetPreferencesKey
Definiowanie kluczy w jednym miejscu
Często stosowanym wzorcem jest zebranie wszystkich kluczy w obiekcie object, aby łatwo było je znaleźć i ponownie wykorzystać, unikając literówek w nazwach tekstowych.
object PrefKeys {
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val FONT_SIZE = intPreferencesKey("font_size")
}Klucze tekstowe a nazwy zmiennych
Pamiętaj, że argument string (np. "dark_mode") jest zapisywany na dysku. Jeśli później zmienisz jego nazwę, stare wartości staną się niedostępne. Nazwa Kotlinowa val służy tylko w kodzie.
Jeden DataStore na jeden obszar
Możesz utworzyć wiele instancji DataStore dla różnych obszarów, nadając każdej własną nazwę pliku, na przykład dla magazynu "settings" i magazynu "user_session". Powiązane klucze należy trzymać razem.
val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")Dostęp z warstwy interfejsu użytkownika
Chociaż delegat jest dostępny z poziomu Context, nie należy odczytywać go bezpośrednio w komponentach Composable. Wstrzyknij DataStore do repozytorium, a następnie udostępnij przepływy obiektowi ViewModel. Dzięki temu interfejs użytkownika można testować.
Prosta struktura repozytorium
Opakowanie DataStore w klasę repozytorium zapewnia przejrzyste API i jedno miejsce do definiowania kluczy oraz logiki mapowania.
class SettingsRepository(private val dataStore: DataStore<Preferences>) {
val darkMode: Flow<Boolean> = dataStore.data
.map { it[PrefKeys.DARK_MODE] ?: false }
}Wartości domyślne
Klucz może jeszcze nie istnieć, dlatego odczyty zwracają null. Podczas mapowania wartości preferencji zawsze podawaj wartość domyślną za pomocą operatora Elvis ?:.
val fontSize: Flow<Int> = dataStore.data
.map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }Szybkie sprawdzenie
Sprawdź swoje rozumienie kluczy preferencji.
Podsumowanie
Skonfigurowałeś Preferences DataStore:
- Utwórz jedną instancję za pomocą delegata
preferencesDataStorena najwyższym poziomie - Zdefiniuj typowane klucze za pomocą
stringPreferencesKey,booleanPreferencesKeyitd. - Zbierz klucze w obiekcie
objecti umieść dostęp do nich w repozytorium - Zawsze podawaj wartości domyślne dla brakujących kluczy
Następnie: odczytywanie i zapisywanie tych ustawień w praktyce.
Często zadawane pytania
Czy lekcja „Preferences DataStore” jest bezpłatna?
Tak — pełny tekst „Preferences DataStore” 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 4 lekcji w sumie.
Co nauczysz się w „Preferences DataStore”?
Reaktywnie przechowuj ustawienia w formacie klucz–wartość Ć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 2 z 4.
Ile czasu zajmuje lekcja „Preferences DataStore”?
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
- DataStore a SharedPreferences
- Preferences DataStore
- Odczytywanie i zapisywanie ustawień
- Proto DataStore