1

I have built my retrofit like this

    private fun <T> createAPI(apiClass: Class<T>, baseUrl: String, vararg interceptors: Interceptor): T {
        val clientBuilder = OkHttpClient().newBuilder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(10, TimeUnit.SECONDS)

        for (interceptor in interceptors) {
            clientBuilder.addInterceptor(interceptor)
        }
        val retrofit = Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(JacksonConverterFactory.create(mapper))

            .client(clientBuilder.build())
            .build()
        return retrofit.create(apiClass)
    }



Api = createAPI(
            Api::class.java,
            BuildConfig.REST_URL,
            NoConnectionInterceptor(App.INSTANCE)
        )

also

I have been able to build the no internet interceptor like this

    /*No internet error interceptor*/
    private open class NoConnectionInterceptor(
        private val context: Context
    ) : Interceptor {
        override fun intercept(chain: Interceptor.Chain): Response {
            return if(!isInternetAvailable(context)) {
                throw NoInternetException()
            } else {
                chain.proceed(chain.request())
            }
        }
    }




class NoInternetException() : IOException() {
    override val message: String
        get() =
            "No internet available, connect to WIFi or Data"
}



is there a way to have an interceptor for timeOutException like that of NoInternetException?

This is because the retrofit throws an error message that "failed to connect to an endpoint after 10000ms" at random.

Oluwafemi
  • 306
  • 1
  • 4
  • 14

0 Answers0