LoginSignup
47
46

More than 5 years have passed since last update.

Retrofit 2.0にアップデートする際に気をつけること

Last updated at Posted at 2015-11-26

前置き

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に変更になりました。

サンプル

47
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
46