일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android Navigation
- Android 12
- Java
- Android WebView
- Android 12 대응
- 영어독립365
- 안드로이드 갤러리 접근
- 안드로이드
- 알고리즘 자바
- scope function
- 안드로이드 카카오 로그인
- 66챌린지
- Android ProgressBar
- 프로그래머스 알고리즘
- 영어공부
- WebView
- Kotlin FCM
- Kotlin
- MVP Architecture
- Android Interceptor
- 카카오 알고리즘
- android recyclerview
- Android
- Android ViewPager2
- 습관만들기
- Android DataBinding
- OkHttp Interceptor
- 안드로이드 fcm
- DataBinding
- Android Jetpack
Archives
- Today
- Total
Developer Geek
Retrofit + Interceptor 예제 in Kotlin 본문
반응형
build.gradle(:app): Retrofit 사용을 위한 Dependency 추가, GsonConverter 추가
dependencies {
..
// https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
// gson converter
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
..
}
Request Interceptor For Adding Headers
RetrofitClient.kt
object RetrofitClient {
private const val BASE_URL = "https://run.mocky.io"
val interceptorClient = OkHttpClient().newBuilder()
.addInterceptor(RequestInterceptor())
.build()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(interceptorClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
class RequestInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder()
var auth = "" // get from localStorage
builder.addHeader("Auth", auth)
builder.addHeader("User-Agent", "Dev-Geek-Sample-App")
return chain.proceed(builder.build())
}
}
RetforitClient
는 Singleton Pattern을 사용했다.
RequestInterceptor 구현
- 먼저
chain.request()
로 부터request
를 받아newBuilder()
를 통해builder
를 생성한다. - 다음 local storage에서 header에 담을
auth
값을 읽어온다. builder
에addHeader(K, V)
메서드를 이용하여 헤더 정보를 담는다.chain.proceed()
에 파라미터로builder
를 담아 요청보낸다.
Add Interceptor
먼저 앞서 구현한 RequestInterceptor
를 포함하는 OkHttpClient Builder
를 생성한다. (interceptorClient
)
다음으로 retrofit
을 생성할 때, client()
메서드를 통해 인자에 생성한 interceptorClient
를 넣어 생성한다.
Response Interceptor For Control Error
RetrofitClient.kt
object RetrofitClient {
private const val BASE_URL = "https://run.mocky.io"
val interceptorClient = OkHttpClient().newBuilder()
.addInterceptor(ResponseInterceptor())
.build()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(interceptorClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
class ResponseInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
when (response.code()) {
400 -> {
// todo Control Error
}
401 -> {
// todo Control Error
}
402 -> {
// todo Control Error
}
}
return response
}
}
RetforitClient
는 Singleton Pattern을 사용했다.
ResponseInterceptor 구현
- 먼저 request에 해당하는 response를 생성 하기 위해,
chain.request()
를 통해request
를 생성한다. - 생성한
request
를 이용하여chain.proceed(request)
request를 숭행한 결과의response
를 생성한다. - 마지막으로
response.code
에 따라 에러를 처리해준다.
Add Interceptor
먼저 앞서 구현한 ResponseInterceptor
를 포함하는 OkHttpClient Builder
를 생성한다. (interceptorClient
)
다음으로 retrofit
을 생성할 때, client()
메서드를 통해 인자에 생성한 interceptorClient
를 넣어 생성한다.
Request Interceptor For Adding Headers & Response Interceptor For Control Error
RetrofitClient.kt
아래의 예제 코드는 Interceptor
에 Header
에 데이터를 담는 것과 Response
를 통해 에러 처리까지 모두 하는 Interceptor
이다.
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private const val BASE_URL = "https://run.mocky.io"
val interceptorClient = OkHttpClient().newBuilder().addInterceptor(RequestInterceptor())
.addInterceptor(ResponseInterceptor()).build()
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(interceptorClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
class RequestInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var auth = "" // get from localStorage
builder.addHeader("Auth", auth)
builder.addHeader("User-Agent", "Dev-Geek-Sample-App")
return chain.proceed(builder.build())
}
}
class ResponseInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
when (response.code()) {
400 -> {
// todo Control Error
}
401 -> {
// todo Control Error
}
402 -> {
// todo Control Error
}
}
return response
}
}
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
반응형
'안드로이드 > Network' 카테고리의 다른 글
OkHttp Interceptor in Android Kotlin (2) | 2022.06.08 |
---|---|
Android Retrofit Singleton Example in Kotlin (0) | 2022.06.02 |
Retrofit2 in Kotlin (0) | 2022.05.30 |
Retrofit2 in Java (0) | 2022.05.29 |
안드로이드 인터넷 접근 권한 허용 (0) | 2022.05.05 |
Comments