Skip to content

Instantly share code, notes, and snippets.

@BambangHeriSetiawan
Last active August 14, 2019 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BambangHeriSetiawan/cb6a62c2dc308c17f2107bc9546f446f to your computer and use it in GitHub Desktop.
Save BambangHeriSetiawan/cb6a62c2dc308c17f2107bc9546f446f to your computer and use it in GitHub Desktop.
API
interface API {
@Headers("Accept: application/json", "Content-type: application/json")
@GET("discover/movie")
fun discoverAsync(@Query("api_key")apiKey:String,
@Query("page")page:Int,
@Query("year")year:Int
): Deferred<ResponseMovies>
@Headers("Accept: application/json", "Content-type: application/json")
@GET("search/movie")
fun searchAsync(@Query("api_key")apiKey:String,
@Query("page")page:Int,
@Query("year")year:Int,
@Query("query")query:String
): Deferred<ResponseMovies>
/*#########################*/
object Factory {
/**
* Config GSON
* @return
*/
private val gson: Gson
get() {
val gsonBuilder = GsonBuilder()
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
return gsonBuilder.create()
}
fun create(base_url: String): API {
return getRetrofitConfig(base_url).create(API::class.java)
}
private fun getRetrofitConfig(base_url: String): Retrofit {
return Retrofit.Builder()
.baseUrl(base_url)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.client(client())
.build()
}
/**
* Config OkhttpClient and interceptions
* @return
*/
private fun client(): OkHttpClient {
return OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.addInterceptor(levelInterceptor())
.build()
}
private fun levelInterceptor(): HttpLoggingInterceptor {
var loging = HttpLoggingInterceptor()
return if (BuildConfig.DEBUG){
loging.setLevel(HttpLoggingInterceptor.Level.BODY)
}else {
loging.setLevel(HttpLoggingInterceptor.Level.BASIC)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment