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
クラスを継承したクラスを作成し、 onResponse
と onFailure
をオーバーライドすることで、共通の処理を追加することができます。
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)
}
})
簡単に共通処理を追加できるので、おすすめです!