OkHttp3+Retrofit2+...

712a91131cf5a9c9f6fab7fe6419221a?s=47 Yoshihisa
February 01, 2018

 OkHttp3+Retrofit2+...

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

712a91131cf5a9c9f6fab7fe6419221a?s=128

Yoshihisa

February 01, 2018
Tweet

Transcript

  1. OkHttp3+Retrofit2+...

  2. • Yoshihisa Takeda • @bomneko_attack • 株式会社Diverse(ミクシィグループ) • YYCというマッチングアプリの開発をしています •

    Android開発をはじめてもうすぐ1年
  3. APIを叩くAndroidアプリをつくるとき 通信部分を作り込むときにつかうライブラリ

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

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

  6. None
  7. None
  8. None
  9. コールバック地獄…!

  10. ReactiveX(Rx)

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

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

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

  15. 完?

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

  17. Coroutine

  18. OkHttp3+Retrofit2+Coroutine

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

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

    1.2 + kotlinx.coroutine 0.21.1
  21. 導入 • build.gradleに2つライブラリを追加 ◦ kotlin.coroutines=enable はいらない

  22. Call Adapter • Jake神のCall Adapter ◦ 他にもう1つ見つけたけど今回はこれ ◦ Call<T>をCoroutineのDeferred<T>に変換する

  23. Deferred<T>を返すように書く

  24. Call<T>をCoroutineのDeferred<T>に変換するAdapterを指定

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

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

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

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