| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 안드로이드
- android recyclerview
- Android WebView
- Android Interceptor
- Android ViewPager2
- MVP Architecture
- Kotlin
- 코틀린 코루틴
- Android ProgressBar
- 영어공부
- Android 12
- Android
- 66챌린지
- 안드로이드 갤러리 접근
- Android 12 대응
- 습관만들기
- 카카오 알고리즘
- OkHttp Interceptor
- 영어독립365
- Android Navigation
- Java
- DataBinding
- Android Jetpack
- 안드로이드 카카오 로그인
- coroutine
- 프로그래머스 알고리즘
- 알고리즘 자바
- scope function
- WebView
- Kotlin FCM
Archives
- Today
- Total
나미래 Android 개발자
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
