Retrofit Interceptor Yazma: İstek/Yanıt Loglama ve Hata Yakalama
# Retrofit Interceptor Yazma: İstek/Yanıt Loglama ve Hata Yakalama
Interceptor, Retrofit'te API çağrılarının gitmeden önce veya geldikten sonra araya girerek istekleri ve yanıtları kontrol etmenin yoludur. Loglama, token ekleme, hata yakalama gibi işler için kullanılır.
Önce `okhttp3.Interceptor` arayüzünü uygulayan bir sınıf yaz:
1import okhttp3.Interceptor2import okhttp3.Response3import android.util.Log45class LoggingInterceptor: Interceptor {6override fun intercept(chain: Interceptor.Chain): Response {7val request = chain.request()89// İstek bilgisini logla10Log.d("API_REQUEST", "URL: ${request.url}")11Log.d("API_REQUEST", "Method: ${request.method}")1213val startTime = System.currentTimeMillis()14val response = chain.proceed(request)15val duration = System.currentTimeMillis() - startTime1617// Yanıt bilgisini logla18Log.d("API_RESPONSE", "Code: ${response.code}")19Log.d("API_RESPONSE", "Duration: ${duration}ms")2021return response22}23}Çıktı:
Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1API_REQUEST: URL: https://api.example.com/users2API_REQUEST: Method: GET3API_RESPONSE: Code: 2004API_RESPONSE: Duration: 245msOkHttpClient oluştururken interceptor'ı ekle:
1import retrofit2.Retrofit2import retrofit2.converter.gson.GsonConverterFactory3import okhttp3.OkHttpClient45val httpClient = OkHttpClient.Builder().addInterceptor(LoggingInterceptor()).build()67val retrofit = Retrofit.Builder().baseUrl("https://api.example.com/").client(httpClient).addConverterFactory(GsonConverterFactory.create()).build()Interceptor içinde try-catch ile hataları yakala:
1override fun intercept(chain: Interceptor.Chain): Response {2val request = chain.request()34return try {5val response = chain.proceed(request)67if (!response.isSuccessful) {8Log.e("API_ERROR", "Hata: ${response.code} - ${response.message}")9}1011response12} catch (e: Exception) {13Log.e("API_ERROR", "Ağ hatası: ${e.message}")14throw e15}16}Interceptor otomatik olarak tüm API çağrılarında çalışır. Loglama, HTTP başlıkları ekleme, yeniden deneme gibi işleri merkezi bir yerde yapabilirsin.
Temel kural: Chain'i her zaman `chain.proceed()` ile devam ettir, aksi takdirde istek gönderilmez.
0 yorum