前置き
Retrofit 1.9.0 -> Retrofit 2.0.0-beta2にupdateした際にいろいろ変更してたのでそのメモ。
大きな変更点
RestAdapter.Builder -> Retrofit.Builder
Before
RestAdapter restAdapter = new RestAdapter.Build()
.setEndpoint("http://ifconfig.me")
.setConverter(MoshiConverterFactory.create())
.build()
After
Retrofit retrofit = new Retrofit.Buidler()
.baseUrl("http://ifconfig.me")
.addConverterFactory(MoshiConverterFactory.create())
.build();
地味に名前も使い方もかわっています。
Converter / Adapterの分離
レスポンスをどう変換するか?(xmlに jsonになど) はConverterになり、
レスポンスをどうやってつなぐか?(Observableで受けるなど) は Adapterになったようです。
interfaceの返り値がCall<T>
になった。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://ifconfig.me")
.addConverterFactory(MoshiConverterFactory.create())
.build();
IfconfigApi api = retrofit.create(IfconfigApi.class);
Call<AllEntity> call = api.all();
Response<AllEntity> response = call.execute();
AllEntity entity = response.body();
callには下記のメソッドが生えてます
- 同期的にリクエストする
execute()
- 非同期的にリクエストする
enqueue(Callback<T> callback)
- リクエストをキャンセルする
cancel()
okhttpをmustで利用するようになった。
okhttpのResponse objectを利用しているので内容がかなり詳細に取れるようになりました。
responseヘッダが前は上手く取れなかったりしたので地味に嬉しい変更かも。
いままでokhttpの利用をしていなかった場合、method数が2Kほど増えるので注意
Loggingはokhttpへ
Retrofit.Builder().setLogLevel()
というメソッドはなくなりました。
代わりに Retrofit.Builder().client(okhttpclient)
で OkHttpClientを渡して、okhttpのinterceptorでロギングをするのが良いようです。
カスタムヘッダはokhttpへ
以前は Retrofit.Builder().setRequestIntercepter()
でカスタムヘッダをつけていたのですが、これもokhttpのinterceptorに任せるようになりました。
RxJavaのハンドリングはAdapterへ
rxjavaを利用する場合には、アダプターを追加する必要があります。
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
現状だとenqueueせずにexecuteする方式でObservableを作成しているので、Androidから移行利用する際にはandroid.os.NetworkOnMainThreadException
が出ないように利用に注意が必要です。
小さな変更点
retrofit.RetrofitError -> retrofit.HttpException
ステータスコード200以外でエラーが出た時に以前はRetrofitErrorでしたが、HttpExceptionに変更になりました。