Callback形式のものをCoroutinesに対応する

Kenji Abe
2 min readJan 10, 2019

--

Callback形式はそのままだと、Coroutinesで手続き的に処理するのができません。それをうまくCoroutinesで扱えるようにする方法です。

サンプル例

例として、以下のようなインターフェースのものをCoroutinesで扱えるようにしてみます。

これを普通に使うと次のような感じです。

Callbackなので、成功したとき・失敗したとき、それぞれのメソッドが呼ばれます。これだけではCoroutinesでは扱いにくいので、これを対応します。

Coroutinesに対応する

対応方法はそんなに難しくなく、 suspendCoroutine を使うことで対応できます。

拡張関数として、 suspendCoroutine で囲んであげて、そこに渡される Continuationresume または resumeWithException を読んであげるだけです。

Coroutinesで実行する

あとは先程作った拡張関数を使うだけです。

失敗したときは例外が投げられるので try ~ catch で囲んで対応します。

まとめ

Callback形式でしか処理できないライブラリもこれを使えばCoroutinesに対応できるようになります。対応方法もそんなに難しくなく便利です。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO