Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OkHttp3+Retrofit2+...

Yoshihisa
February 01, 2018

 OkHttp3+Retrofit2+...

OkHttp3とRetrofit2そしてコルーチンを組み合わせて非同期通信を実現するお話

Yoshihisa

February 01, 2018
Tweet

More Decks by Yoshihisa

Other Decks in Technology

Transcript

  1. OkHttp3+Retrofit2+...

    View Slide

  2. ● Yoshihisa Takeda
    ● @bomneko_attack
    ● 株式会社Diverse(ミクシィグループ)
    ● YYCというマッチングアプリの開発をしています
    ● Android開発をはじめてもうすぐ1年

    View Slide

  3. APIを叩くAndroidアプリをつくるとき
    通信部分を作り込むときにつかうライブラリ

    View Slide

  4. OkHttp
    http://square.github.io/okhttp/

    View Slide

  5. Retorofit
    http://square.github.io/retrofit/

    View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. コールバック地獄…!

    View Slide

  10. ReactiveX(Rx)

    View Slide

  11. Observable系(Single,Flowableなど)を返すように書く

    View Slide

  12. CallをRxJava2のObservable系に変換するCall Adapterを指定する

    View Slide

  13. View Slide

  14. コールバック地獄からの解放…!

    View Slide


  15. View Slide

  16. 完?

    View Slide

  17. できることならこう書きたくないですか?

    View Slide

  18. Coroutine

    View Slide

  19. OkHttp3+Retrofit2+Coroutine

    View Slide

  20. Coroutine
    ● 「中断・再開が可能な関数」
    ○ とりあえずの理解としては「軽量スレッド」的なもの
    ● Kotlin1.1から実験的に導入された
    ● Coroutinesをゼロから説明すると本1冊書けるぐらいになるので
    本発表では導入とRetrofitでの使い方についてのみ

    View Slide

  21. 警告
    ● Kotlin CoroutineはKotlin1.2の時点ではExperimentalで提供
    プロダクションへの導入はまだ控えたほうが安全
    ○ 1.3でExperimentalが外れる予定なので勉強をはじめるには良いタイミング
    ○ 本資料の組み合わせは Kotlin 1.2 + kotlinx.coroutine 0.21.1

    View Slide

  22. 導入
    ● build.gradleに2つライブラリを追加
    ○ kotlin.coroutines=enable はいらない

    View Slide

  23. Call Adapter
    ● Jake神のCall Adapter
    ○ 他にもう1つ見つけたけど今回はこれ
    ○ CallをCoroutineのDeferredに変換する

    View Slide

  24. Deferredを返すように書く

    View Slide

  25. CallをCoroutineのDeferredに変換するAdapterを指定

    View Slide

  26. View Slide

  27. レスポンスが返ってくるまで中断
    (UIスレッドはブロックされない )

    View Slide

  28. Rxはいらない子になるのか?
    ● No
    ● RxがPromise代わり使われてきたという歴史
    ● コルーチンもPromiseを同期的に書く手法(async/await)を提供しているので勘違い
    しやすい
    ● Rxは「リアクティブプログラミングのためのフレームワーク」なのでそもそも比較対象
    にならない

    View Slide

  29. まとめ
    ● もうすぐくるかもしれないコルーチン時代に備えて勉強はしておこう
    ● Jakeのライブラリを使えばOkHttpとRetrofitの組み合わせにおいてコルーチンを簡
    単に導入でき使える!
    ○ もう1つはこれ。どっちを使うかはお好みで …
    https://github.com/gildor/kotlin-coroutines-retrofit

    View Slide

  30. 宣伝
    DiverseはDroidKaigi2018のPLATINUMスポンサーとして参加します
    当日ブースで同人誌を無料配布します

    View Slide