LoginSignup
4
3

More than 3 years have passed since last update.

LiveData + Coroutine + RetrofitでAPI呼び出しを簡潔に実装する

Last updated at Posted at 2019-07-09

はじめに

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呼び出しを実装する例を書きました。

参考

Lifecycle | Android Developers

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3