0Pricing
Android Academy · Lekcja

Obserwowanie danych za pomocą Flow

Reaguj reaktywnie na zmiany w bazie danych

Obserwowanie danych za pomocą Flow to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 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.

Reaktywne odczyty z bazy danych

Zamiast wykonywać zapytanie tylko raz, Room może zwrócić obiekt Flow, który emituje nową wartość za każdym razem, gdy zmienią się dane źródłowe. Interfejs użytkownika aktualizuje się automatycznie.

Zwracanie Flow z DAO

Należy zadeklarować typ zwracany jako Flow<...>. Proszę zauważyć, że nie jest to funkcja suspend.

@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>

Dlaczego tutaj nie używać suspend

Funkcja suspend zwraca pojedynczy wynik i kończy działanie. Flow jest ciągłym strumieniem, dlatego jest zwykłą funkcją zwracającą obiekt strumienia; wartości zbiera się w czasie.

Jak Room wie, kiedy emitować ponownie

Room śledzi tabele, których dotyczy zapytanie. Gdy dowolny zapis zmieni dane w tych tabelach, Room ponownie wykonuje zapytanie i emituje aktualny wynik w strumieniu Flow. Dzieje się to automatycznie.

Zbieranie wartości w korutynie

Wartości ze strumienia zbiera się wewnątrz korutyny, zazwyczaj w ViewModelu.

viewModelScope.launch {
    dao.observeUsers().collect { users ->
        _uiState.value = UiState(users)
    }
}

Mapowanie Flow

Przed udostępnieniem strumienia można go przekształcić za pomocą operatorów, takich jak map.

val names: Flow<List<String>> =
    dao.observeUsers().map { list ->
        list.map { it.name }
    }

Konwertowanie na StateFlow

Zimny przepływ DAO można przekonwertować na gorący StateFlow dla interfejsu użytkownika za pomocą stateIn.

val uiState = dao.observeUsers()
    .map { UiState(it) }
    .stateIn(
        viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState()
    )

Zbieranie wartości w Compose

Ekran zbiera ten stan z uwzględnieniem cyklu życia, dokładnie tak, jak nauczono wcześniej.

@Composable
fun UsersScreen(vm: UserViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    UserList(state.users)
}

Pełny łańcuch reaktywny

Podsumowując:

  • Room emituje wartości po zmianie danych.
  • ViewModel mapuje je na stan interfejsu użytkownika za pomocą stateIn.
  • Compose zbiera je za pomocą collectAsStateWithLifecycle.

Zapisz dane w bazie w dowolnym miejscu, a ekran odświeży się sam.

Jedno źródło prawdy

Ten wzorzec sprawia, że baza danych jest jedynym źródłem prawdy. Interfejs użytkownika nigdy nie przechowuje nieaktualnych kopii — zawsze odzwierciedla dane faktycznie zapisane.

Zapisy wywołują aktualizacje

Każda operacja wstawiania, aktualizowania lub usuwania w obserwowanej tabeli powoduje ponowną emisję wartości w strumieniu, więc po zmianie nie trzeba ręcznie odświeżać listy.

suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automatically

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat obserwowania danych za pomocą Flow.

Powtórzenie

Uczestnik nauczył się:

  • Metody DAO zwracające Flow emitują wartości ponownie po zmianie danych.
  • Są zwykłymi funkcjami, które nie są funkcjami suspend i zwracają strumień.
  • Używać stateIn + collectAsStateWithLifecycle do reaktywnego sterowania interfejsem użytkownika.
  • Baza danych staje się jedynym źródłem prawdy.

Często zadawane pytania

Czy lekcja „Obserwowanie danych za pomocą Flow” jest bezpłatna?

Tak — pełny tekst „Obserwowanie danych za pomocą Flow” 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 „Obserwowanie danych za pomocą Flow”?

Reaguj reaktywnie na zmiany w bazie danych Ć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 4.

Ile czasu zajmuje lekcja „Obserwowanie danych za pomocą Flow”?

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. Encje i DAO
  2. Klasa bazy danych Room
  3. Zapytania i relacje
  4. Obserwowanie danych za pomocą Flow
← Powrót do Android Academy