アーキテクチャコンポーネントで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
}