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

Kenji Abe
Kenji Abe
Jan 10, 2019 · 2 min read

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

サンプル例

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

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

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

Coroutinesに対応する

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

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

Coroutinesで実行する

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

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

まとめ

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

Kenji Abe

Written by

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade