Kotlin 1.3 からStableになるといわれているKotlin Coroutinesを勉強したのでメモとして書いておきます。
Kotlin Coroutinesって何??って方は下の記事を読めばだいたい理解できるかと思います。自分もこの記事を読んで学びました。
準備
まずはセットアップからしていきます。
前提として
- Retrofitは導入してある
- コンバータはMoshiを使うので導入してある
app/build.gradle
に書きを追加します。
kotlin {
experimental {
coroutines "enable"
}
}
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:0.22.5"
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-experimental-adapter:1.0.0'
バージョンは最新のものを使用してください
実装
API通信
- InfoService.kt
interface InfoService {
companion object {
const val baseUrl = "APIの接続先"
}
@GET("info/")
fun getInfo(): Deferred<Response<List<Info>>>
}
これでAPIの接続先とかを定義したので次はRetrofitインスタンスを作成します。
Retrofitインスタンス
- InfoRepository.kt
class InfoRepository {
fun getInfo() = Retrofit.Builder().baseUrl(InfoService.baseUrl)
.addConverterFactory(MoshiConverterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build().create(InfoService::class.java)
}
Retrofitインスタンスを呼ぶ
次に定義したRetofitインスタンスをViewModelから呼びます。
- InfoViewModel
fun start() {
val service = InfoRepository().getInfo()
launch {
val request = service.getInfo()
val response = request.await()
if (response.isSuccessful) {
// 成功
print(response.body())
val list = response.body() ?: return@launch
// ここで取得したデータでViewwをごにょごにょする
items.clear()
items.addAll(list)
} else {
// エラー
print(response.errorBody())
}
}
}
これで完成です。