0Pricing
Android Academy · บทเรียน

การสังเกตข้อมูลด้วย Flow

ตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูลแบบรีแอกทีฟ

การสังเกตข้อมูลด้วย Flow เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

การอ่านฐานข้อมูลแบบตอบสนอง

แทนที่จะค้นหาเพียงครั้งเดียว Room สามารถส่งคืนโฟลว์ที่ปล่อยค่าใหม่ทุกครั้งที่ข้อมูลต้นทางเปลี่ยนแปลงได้ ส่วนติดต่อผู้ใช้ของคุณจะอัปเดตโดยอัตโนมัติ

การส่งคืนโฟลว์จาก DAO

ประกาศชนิดข้อมูลที่ส่งคืนเป็น Flow<...> โปรดสังเกตว่านี่ไม่ใช่ฟังก์ชันระงับการทำงาน

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

เหตุใดจึงไม่ใช้ suspend ที่นี่

ฟังก์ชัน suspend ส่งคืนผลลัพธ์เดียวแล้วจบการทำงาน ส่วน Flow เป็นกระแสข้อมูลที่ทำงานต่อเนื่อง จึงเป็นฟังก์ชันปกติที่ส่งคืนออบเจ็กต์กระแสข้อมูล แล้วคุณจึงเก็บค่าจากมันตามเวลา

Room รู้ได้อย่างไรว่าต้องปล่อยค่าใหม่

Room ติดตามว่าการค้นหาแตะต้องตารางใดบ้าง เมื่อมีการเขียนข้อมูลใด ๆ ส่งผลต่อตารางเหล่านั้น Room จะดำเนินการค้นหาอีกครั้งและปล่อยผลลัพธ์ล่าสุดลงในโฟลว์ การทำงานนี้เกิดขึ้นโดยอัตโนมัติ

การเก็บค่าในคอร์รูทีน

คุณเก็บค่าจากโฟลว์ภายในคอร์รูทีน โดยทั่วไปจะทำใน ViewModel

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

การแมปโฟลว์

คุณสามารถแปลงกระแสข้อมูลด้วยตัวดำเนินการอย่าง map ก่อนเปิดเผยให้ส่วนอื่นใช้งาน

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

การเปลี่ยนเป็น StateFlow

แปลงโฟลว์ DAO แบบเย็นเป็น StateFlow แบบร้อนสำหรับส่วนติดต่อผู้ใช้ด้วย stateIn

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

การเก็บค่าใน Compose

หน้าจอจะเก็บค่าสถานะดังกล่าวโดยคำนึงถึงวงจรชีวิต เช่นเดียวกับที่คุณได้เรียนรู้ก่อนหน้านี้

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

ห่วงโซ่แบบตอบสนองทั้งหมด

เมื่อนำทุกอย่างมาประกอบกัน:

  • Room ปล่อยค่าเมื่อข้อมูลเปลี่ยนแปลง
  • ViewModel แมปข้อมูลเป็นสถานะส่วนติดต่อผู้ใช้ผ่าน stateIn
  • Compose เก็บค่าด้วย collectAsStateWithLifecycle

ไม่ว่าคุณจะเขียนข้อมูลลงฐานข้อมูลที่ใด หน้าจอจะรีเฟรชตัวเอง

แหล่งข้อมูลจริงเพียงแหล่งเดียว

รูปแบบนี้ทำให้ฐานข้อมูลเป็นแหล่งข้อมูลจริงเพียงแหล่งเดียว ส่วนติดต่อผู้ใช้จะไม่เก็บสำเนาที่ล้าสมัย แต่จะแสดงสิ่งที่จัดเก็บอยู่จริงเสมอ

การเขียนข้อมูลทำให้เกิดการอัปเดต

การเพิ่ม การอัปเดต หรือการลบข้อมูลใด ๆ ในตารางที่กำลังเฝ้าดู จะทำให้โฟลว์ปล่อยค่าใหม่ ดังนั้นคุณจึงไม่ต้องรีเฟรชรายการด้วยตนเองหลังจากมีการเปลี่ยนแปลง

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการสังเกตข้อมูลด้วยโฟลว์

ทบทวน

คุณได้เรียนรู้ว่า:

  • เมธอดของ DAO ที่ส่งคืน Flow จะปล่อยค่าใหม่เมื่อข้อมูลเปลี่ยนแปลง
  • เมธอดเหล่านี้เป็นฟังก์ชันปกติ (ไม่ใช่ฟังก์ชันระงับการทำงาน) ที่ส่งคืนกระแสข้อมูล
  • ใช้ stateIn + collectAsStateWithLifecycle เพื่อขับเคลื่อนส่วนติดต่อผู้ใช้แบบตอบสนอง
  • ฐานข้อมูลกลายเป็นแหล่งข้อมูลจริงเพียงแหล่งเดียว

คำถามที่พบบ่อย

บทเรียน “การสังเกตข้อมูลด้วย Flow” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสังเกตข้อมูลด้วย Flow” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสังเกตข้อมูลด้วย Flow”

ตอบสนองต่อการเปลี่ยนแปลงฐานข้อมูลแบบรีแอกทีฟ คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสังเกตข้อมูลด้วย Flow” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เอนทิตีและ DAO
  2. คลาสฐานข้อมูล Room
  3. คำค้นและความสัมพันธ์
  4. การสังเกตข้อมูลด้วย Flow
← กลับไปที่ Android Academy