Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

前置き

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

サンプル

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away