Recent Posts
밍쯔와 안작고 안귀여운 에러들🖤
[Android/Kotlin] 서버 BASE_URL 동적으로 바꾸기 본문
[ 문제 ]
로그인 시 받는 access(int = 0~5) 값에 따라 BASE_URL을 동적으로 바꿔줘야 하는 상황
[ 해결 방법 ]
해당 어플은 재시작 할 때마다 로그인을 해야하는 형태임.
로그인 시 받는 access 값을 전역 변수에 set 하고 이후, get 형태로 활용.
access 값을 받을 때, Retrofit의 setUrl 실행.
LoginActiviti 에서는 BASE_URL을 무조건 사용하고, 이후 access 값에 따라 다른 url로 실행.
[ 기존 코드 ]
class RetrofitClient {
companion object{
private var retrofitClient: RetrofitService? = null
fun getClient(): RetrofitService?{
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60,TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build()
if(retrofitClient == null){
retrofitClient = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build().create(RetrofitService::class.java)
}
return retrofitClient
}
}
}
[ 수정된 코드 ]
class RetrofitClient {
companion object{
private var retrofitClient: RetrofitService? = null
private var Base_Url = "https://-------0.--------/app/"
private var Flag = false
fun getClient(isLogin : Boolean): RetrofitService?{
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60,TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build()
if (isLogin) {
retrofitClient = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build().create(RetrofitService::class.java)
} else if (Flag || retrofitClient == null) {
retrofitClient = Retrofit.Builder()
.baseUrl(Base_Url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build().create(RetrofitService::class.java)
setFlag(false)
}
return retrofitClient
}
fun setUrl(access : Int) {
if (access in 1..5) {
Base_Url = "https://-------" + access + ".--------/app/"
} else {
Base_Url = ""https://-------0.--------/app/""
}
setFlag(true)
}
private fun setFlag(flag : Boolean) {
Flag = flag
}
}
}
https://realapril.tistory.com/46
https://unluckluck.medium.com/using-two-or-more-base-urls-with-kotlin-and-retrofit-a70f5d9a5798
https://www.baeldung.com/retrofit-dynamic-url
'Develop > Android | iOS' 카테고리의 다른 글
[Android/Kotlin]Only the original thread that created a view hierarchy can touch its views. (0) | 2022.08.29 |
---|---|
[Android/Kotlin] naver 와 kakao 로그인 API #re-write (0) | 2022.08.19 |
[Android/Java] 스켈레톤 UI 자료 조사 (0) | 2022.08.02 |
[Android/Kotlin] 구글 로그인 - Result_canceled #re-write (0) | 2022.07.25 |
[Android/Kotlin] 언어 변경 (0) | 2022.07.18 |