Skip to content

Instantly share code, notes, and snippets.

@snijsure
Last active July 18, 2018 18:50
Show Gist options
  • Save snijsure/e5de84f6958fc5b8c57f2e5fad410b72 to your computer and use it in GitHub Desktop.
Save snijsure/e5de84f6958fc5b8c57f2e5fad410b72 to your computer and use it in GitHub Desktop.
Create API Client given BASE_URL
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