2
0

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.

KotlinAdvent Calendar 2018

Day 12

RxJavaとCoroutineが混じったときのRetrofitで困ったあなたへ

Last updated at Posted at 2018-12-20

Kotlin Advent Calendar 12日目の代打です。

最近Coroutineの話題が多いですね。
でもRxJavaもよく使いますね。
さてそうなってくると、「ここはCoroutineとして使いたい…あっちはRxのStreamとして使いたい…」というのがあると思います。

個人的な結論

ArrowのRetrofitAdapter使いましょう。

Arrowってなんやねん、という人は別のAdventCalendarにいくつか記事を投稿しているので、そちらを参考にしてください。

雑サンプルコード

// コンパイルすら通してないから、もしかしたらミスっているかもだが、雰囲気で察してくれ

interface Service {
  @GET("/path/to/api")
  fun get() : CallK<MyResponse>
}

// 中略

val res = retrofit.create(Service::class.java).get()

val useDeferred: DeferredK<Response<MyResponse>> = res.async(DeferredK.async()).fix()

val useSingleK: SingleK<Response<MyResponse>> = res.async(SingleK.async()).fix()

DeferredKはDeferredをDelegateしているので、そのままDeferredとして使えます。
SingleKはそうはなっていないので、他のStreamと混ぜたり、Subscribeする必要があるときはuseSingleK.singleのように利用すればOKです。

これで、RxとCoroutineがいりじまった場合にRetrofitの定義に困ることはありませんね、やったぜ!

reference

https://arrow-kt.io/docs/integrations/retrofit/
https://github.com/arrow-kt/arrow/tree/0.8.1/modules/integrations/arrow-integrations-retrofit-adapter

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?