10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-10

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

これで完成です。

参考

10
10
1

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
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?