Last active
July 18, 2018 18:50
-
-
Save snijsure/e5de84f6958fc5b8c57f2e5fad410b72 to your computer and use it in GitHub Desktop.
Create API Client given BASE_URL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory | |
import info.androidhive.flighttickets.app.Const | |
import okhttp3.OkHttpClient | |
import okhttp3.logging.HttpLoggingInterceptor | |
import retrofit2.Retrofit | |
import retrofit2.converter.gson.GsonConverterFactory | |
import java.util.concurrent.TimeUnit | |
// Use as val apiService = ApiClient.client?.create(ApiService::class.java) | |
// | |
object ApiClient { | |
private val TAG = ApiClient::class.java.simpleName | |
private var retrofit: Retrofit? = null | |
private val REQUEST_TIMEOUT = 60 | |
private var okHttpClient: OkHttpClient? = null | |
val client: Retrofit? | |
get() { | |
if (okHttpClient == null) | |
initOkHttp() | |
if (retrofit == null) { | |
okHttpClient?.let { okHttpClient -> | |
retrofit = Retrofit.Builder() | |
.baseUrl(Const.BASE_URL) | |
.client(okHttpClient) | |
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) | |
.addConverterFactory(GsonConverterFactory.create()) | |
.build() | |
} | |
} | |
return retrofit | |
} | |
private fun initOkHttp() { | |
val httpClient = OkHttpClient().newBuilder() | |
.connectTimeout(REQUEST_TIMEOUT.toLong(), TimeUnit.SECONDS) | |
.readTimeout(REQUEST_TIMEOUT.toLong(), TimeUnit.SECONDS) | |
.writeTimeout(REQUEST_TIMEOUT.toLong(), TimeUnit.SECONDS) | |
val interceptor = HttpLoggingInterceptor() | |
interceptor.level = HttpLoggingInterceptor.Level.BODY | |
httpClient.addInterceptor(interceptor) | |
httpClient.addInterceptor { chain -> | |
val original = chain.request() | |
val requestBuilder = original.newBuilder() | |
.addHeader("Accept", "application/json") | |
.addHeader("Request-Type", "Android") | |
.addHeader("Content-Type", "application/json") | |
val request = requestBuilder.build() | |
chain.proceed(request) | |
} | |
okHttpClient = httpClient.build() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment