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.Interceptor
2import okhttp3.Response
3import android.util.Log
4
5class LoggingInterceptor: Interceptor {
6override fun intercept(chain: Interceptor.Chain): Response {
7val request = chain.request()
8
9// İstek bilgisini logla
10Log.d("API_REQUEST", "URL: ${request.url}")
11Log.d("API_REQUEST", "Method: ${request.method}")
12
13val startTime = System.currentTimeMillis()
14val response = chain.proceed(request)
15val duration = System.currentTimeMillis() - startTime
16
17// Yanıt bilgisini logla
18Log.d("API_RESPONSE", "Code: ${response.code}")
19Log.d("API_RESPONSE", "Duration: ${duration}ms")
20
21return response
22}
23}

Çıktı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
2API_REQUEST: Method: GET
3API_RESPONSE: Code: 200
4API_RESPONSE: Duration: 245ms

OkHttpClient oluştururken interceptor'ı ekle:

1import retrofit2.Retrofit
2import retrofit2.converter.gson.GsonConverterFactory
3import okhttp3.OkHttpClient
4
5val httpClient = OkHttpClient.Builder().addInterceptor(LoggingInterceptor()).build()
6
7val 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()
3
4return try {
5val response = chain.proceed(request)
6
7if (!response.isSuccessful) {
8Log.e("API_ERROR", "Hata: ${response.code} - ${response.message}")
9}
10
11response
12} catch (e: Exception) {
13Log.e("API_ERROR", "Ağ hatası: ${e.message}")
14throw e
15}
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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz