ใช้ Kotlin coroutines กับส่วนประกอบสถาปัตยกรรม
คุณสามารถใช้liveData
ฟังก์ชันตัวสร้างเพื่อเรียกใช้suspend
ฟังก์ชันโดยให้ผลลัพธ์เป็นLiveData
วัตถุ
val user: LiveData<User> = liveData {
val data = database.loadUser()
emit(data)
}
คุณยังสามารถปล่อยค่าหลายค่าจากบล็อก การemit()
เรียกแต่ละครั้งจะระงับการทำงานของบล็อกจนกว่าLiveData
จะมีการตั้งค่าบนเธรดหลัก
val user: LiveData<Result> = liveData {
emit(Result.loading())
try {
emit(Result.success(fetchUser()))
} catch(ioException: Exception) {
emit(Result.error(ioException))
}
}
ในการกำหนดค่า gradle ของคุณให้ใช้androidx.lifecycle:lifecycle-livedata-ktx:2.2.0
หรือสูงกว่า
นอกจากนี้ยังมีบทความเกี่ยวกับเรื่องนี้
อัปเดต : นอกจากนี้ยังสามารถเปลี่ยนแปลงได้LiveData<YourData>
ในไฟล์Dao
interface
. คุณต้องเพิ่มsuspend
คำสำคัญในฟังก์ชัน:
@Query("SELECT * FROM the_table")
suspend fun getAll(): List<YourData>
และในกรณีที่ViewModel
คุณต้องการรับแบบอะซิงโครนัสเช่นนั้น:
viewModelScope.launch(Dispatchers.IO) {
allData = dao.getAll()
// It's also possible to sync other data here
}