LoginSignup
7
3

More than 3 years have passed since last update.

Retrofit2で共通処理を行う

Last updated at Posted at 2020-03-24

AndroidアプリでAPIを叩きたい時、定番のライブラリと言えばRetrofitです。
このRetrofitを使って、APIからのレスポンスによって同じ様な処理を行う場合、毎回同じコードを書くのは面倒ですよね!
同じ様な処理は共通化しちゃいましょう!

通常のAPI呼び出し

例えば、エラー時に下記のようなToastを表示する仕組みがあったとします。
様々な箇所でAPIを呼び出す度、全てに同じ様な処理を書くのは効率が悪いです。
ここを上手く解決しましょう!

Api.getUser().enqueue(object: Callback<Response?> {
  override fun onResponse(call: Call<Response?>, response: Response<Response?>) {
    if(!response.isSuccessful) {
      // エラー時の処理
      Toast.makeText(context, "error!", Toast.LENGTH_SHORT).show()
    }
  }

  override fun onFailure(call: Call<Response?>, t: Throwable) {
  }
})

Callbackのオーバーライド

Callback クラスを継承したクラスを作成し、 onResponseonFailure をオーバーライドすることで、共通の処理を追加することができます。

open class CustomCallback<T>(private val context: Context): Callback<T> {
  override fun onResponse(call: Call<T>, response: Response<T>) {
    if(!response.isSuccessful) {
      // エラー時の共通処理
      Toast.makeText(context, "error!", Toast.LENGTH_SHORT).show()
    }
  }

  override fun onFailure(call: Call<T>, t: Throwable) {
  }
}

この様なクラスを作る事により、すべてのAPI呼び出し処理に共通処理を追加可能です。
下記のように使用します。
Toastの処理は書いていませんが、 super.onResponse(call, response) で元の処理を呼び出しているので、Toastが表示されます。
もちろん、 onFailure の箇所にも自由に追加可能です。

Api.getUser().enqueue(object: CustomCallback<Response?>(this) {
  override fun onResponse(call: Call<Response?>, response: Response<Response?>) {
    super.onResponse(call, response)
  }

  override fun onFailure(call: Call<Response?>, t: Throwable) {
    super.onFailure(call, t)
  }
})

簡単に共通処理を追加できるので、おすすめです!

7
3
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
7
3