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())する必要がある