Odczytywanie i zapisywanie ustawień
Zapisuj preferencje użytkownika i obserwuj ich zmiany
Odczytywanie i zapisywanie ustawień to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 3 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.
Odczytywanie i zapisywanie
Po zdefiniowaniu kluczy dwie podstawowe operacje to odczytywanie przepływu danych oraz zapisywanie za pomocą edit. Odczyty są reaktywne, a zapisy są funkcjami zawieszającymi.
Przepływ danych
dataStore.data to obiekt Flow<Preferences>. Za każdym razem, gdy wykonasz zapis, przepływ emituje nową migawkę Preferences, dzięki czemu odbiorcy są automatycznie aktualizowani.
val rawData: Flow<Preferences> = dataStore.dataMapowanie pojedynczej wartości
Rzadko potrzebujesz całego obiektu Preferences. Użyj map, aby wyodrębnić jeden klucz i zastosować wartość domyślną.
val darkMode: Flow<Boolean> = dataStore.data
.map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }Obsługa błędów odczytu
Odczyt z dysku może zakończyć się błędem IOException. Użyj catch przed map, aby emitować puste preferencje i utrzymać przepływ aktywny.
val darkMode: Flow<Boolean> = dataStore.data
.catch { e ->
if (e is IOException) emit(emptyPreferences())
else throw e
}
.map { it[PrefKeys.DARK_MODE] ?: false }Zapisywanie za pomocą edit
Aby zmienić wartości, wywołaj zawieszającą funkcję edit. Wewnątrz lambdy otrzymujesz modyfikowalny obiekt preferencji i ustawiasz w nim klucze. Cały blok stanowi jedną transakcję.
suspend fun setDarkMode(enabled: Boolean) {
dataStore.edit { prefs ->
prefs[PrefKeys.DARK_MODE] = enabled
}
}edit jest funkcją zawieszającą
Ponieważ edit jest funkcją zawieszającą, musisz wywołać ją z korutyny, zwykle wewnątrz ViewModel za pomocą viewModelScope.launch. Gwarantuje to wykonanie zapisu poza głównym wątkiem.
fun toggleDarkMode(value: Boolean) {
viewModelScope.launch {
repository.setDarkMode(value)
}
}Aktualizowanie wielu kluczy
W jednym bloku edit można ustawić kilka kluczy. Są one zatwierdzane razem, atomowo, więc obserwatorzy nigdy nie zobaczą częściowej aktualizacji.
dataStore.edit { prefs ->
prefs[PrefKeys.USERNAME] = "ada"
prefs[PrefKeys.DARK_MODE] = true
prefs[PrefKeys.FONT_SIZE] = 16
}Zwiększanie wartości
Wewnątrz edit możesz odczytać bieżącą wartość i obliczyć nową, co jest przydatne w przypadku liczników, takich jak liczba uruchomień.
suspend fun incrementLaunchCount() {
dataStore.edit { prefs ->
val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
prefs[PrefKeys.LAUNCH_COUNT] = current + 1
}
}Usuwanie i czyszczenie
Pojedynczy klucz usuwa się za pomocą remove, a cały magazyn czyści za pomocą clear; obie operacje wykonuje się wewnątrz bloku edit.
dataStore.edit { prefs ->
prefs.remove(PrefKeys.USERNAME)
}
dataStore.edit { prefs ->
prefs.clear()
}Zbieranie danych w Compose
W komponencie Composable przekształć przepływ ViewModel w stan za pomocą collectAsStateWithLifecycle(). Interfejs użytkownika jest ponownie kompozytowany za każdym razem, gdy ustawienie się zmienia.
val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)
Switch(
checked = darkMode,
onCheckedChange = { viewModel.toggleDarkMode(it) }
)Cykl odczyt–modyfikacja–zapis
Po połączeniu wszystkich elementów wygląda to tak: interfejs użytkownika odczytuje dane za pomocą przepływu, użytkownik zmienia ustawienie, ViewModel uruchamia korutynę wywołującą edit, DataStore zapisuje dane, przepływ emituje je ponownie, a interfejs użytkownika jest ponownie kompozytowany. Całość jest reaktywna.
Szybkie sprawdzenie
Sprawdź swoje rozumienie odczytywania i zapisywania.
Podsumowanie
Potrafisz już odczytywać i zapisywać ustawienia:
dataStore.datato reaktywny obiektFlow<Preferences>mapwyodrębnia pojedynczą wartość, acatchobsługuje błędy wejścia-wyjściadataStore.edit { }wykonuje zapis atomowo z poziomu korutynycollectAsStateWithLifecyclesteruje interfejsem Compose
Następnie: typowane dane strukturalne za pomocą Proto DataStore.
Często zadawane pytania
Czy lekcja „Odczytywanie i zapisywanie ustawień” jest bezpłatna?
Tak — pełny tekst „Odczytywanie i zapisywanie ustawień” 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 „Odczytywanie i zapisywanie ustawień”?
Zapisuj preferencje użytkownika i obserwuj ich zmiany Ć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 3 z 4.
Ile czasu zajmuje lekcja „Odczytywanie i zapisywanie ustawień”?
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