Retrofit 1.9.0 を使っていたコードをRetrofit 2.0.0-beta3に書き換えてみたら思いのほか変更が多くて大変でした。
全体的に、Retrofit自体がOkHttpのみに依存するようになったことで、OkHttpと重複する機能が削られるなどインターフェイス全域にわたる大きな変更が加えられました。またOkHttpも3.0となり、OkHttpClient, Request, Responseなどがimmutable classになっています。
修正パッチはこんな感じです:
migration to Retrofit2 / OkHttp3 by gfx · Pull Request #36 · gfx/Android-Helium · GitHub
このAndroidアプリのWeb API呼び出しは次のような特徴を備えています。
- API endpointは3つ
- うち2つはJSONを返し、1つはXMLを返す
- Retrofit RxJava call adapterを使っている
- テストではHTTP clientのmockを定義して使っている
今回修正することになった大きな部分は次のとおりです。
- 名前の変更:
RestAdapter
からRetrofit
へ - Retrofitの
RequestInterceptor
が削除され、OkHttpのInterceptor
に統一された - RxJava call adapterが別モジュールになった。これが足りないと非常にわかりにくい実行時エラーになる
- Gson converterなどのconverterもすべて別モジュールになった
- setLogLevelがなくなり、
com.squareup.okhttp3:logging-interceptor
モジュールが必要になった - setter / getterが
setFoo(x)
/getFoo()
ではなくfoo(x)
/foo()
になった Observable
はsubscribeOn()
が指定されないようになったので、呼び出し側でsubscribeOn(Schedulers.io())
する必要がある