search
LoginSignup
10

More than 3 years have passed since last update.

posted at

updated at

Organization

Kotlin Coroutines + Retrofit2を使ってAPIを叩く

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())
            }
        }
}

これで完成です。

参考

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
What you can do with signing up
10