はじめに
LivedataがCoroutineに対応したので、
これらを利用してretrofitを用いたAPIの呼び出しを書きました。
使用ライブラリ
app.gradle
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha02"
implementation "com.squareup.retrofit2:retrofit:2.6.0"
実装
GitHubのAPIを用いてユーザー情報を取得するサンプルです。
ModelやDIの実装については割愛させていただきます。
API定義
GithubApi.kt
interface GithubApi {
@GET("/users/{user}")
fun getUser(@Path("user") loginName: String): LiveData<GithubUser>
}
Retrofitを用いたAPI呼び出しの定義部分。返り値の型をLiveDataにしています。
API呼び出し
GithubRepository.kt
class GithubRepository(val githubApi: GithubApi) {
fun getUser(loginName: String) = liveData {
emitSource(githubApi.getUser(loginName))
}
}
上で定義したAPIの呼び出しです。
liveDataブロック内で受け取るliveDataを処理します。
emitSource()するとliveDataに値が流れ込みます。
LiveDataの取得
GithubViewModel.kt
class GithubViewModel(application: Application, private val repository: GithubRepository) : AndroidViewModel(application) {
fun getUser(loginName: String) = repository.getUser(loginName)
}
あとはViewModelやFragmentなどでLiveDataとして値を取得できるので、
observeしたりdatabindingに値をセットしたりして利用します。
以上、Coroutine対応したLiveDataを用いてAPI呼び出しを実装する例を書きました。