아키텍처 구성 요소와 함께 Kotlin 코 루틴을 사용합니다.
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
}