Skip to content

Instantly share code, notes, and snippets.

@mariusz-blaszczak
Last active August 28, 2018 10:28
Show Gist options
  • Save mariusz-blaszczak/090db9a9fd8ed24eeed9a5e60d7014a8 to your computer and use it in GitHub Desktop.
Save mariusz-blaszczak/090db9a9fd8ed24eeed9a5e60d7014a8 to your computer and use it in GitHub Desktop.
class ApiClient private constructor(context: Context) {
val apiService = createApiService(context)
private fun createApiService(context: Context): ApiService {
return Retrofit.Builder()
.baseUrl(context.getString(R.string.api_base_url))
.addConverterFactory(createConverterFactory())
.client(createHttpClient(context))
.build()
.create(ApiService::class.java)
}
private fun createConverterFactory(): GsonConverterFactory {
return GsonConverterFactory.create(GSON)
}
private fun createHttpClient(context: Context): OkHttpClient {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.addInterceptor(interceptor)
.build()
}
companion object {
...
}
}
interface ApiService {
@GET("doors_state/read")
fun readLock(): Call<LockResponse>
@POST("doors_state/toggle")
fun toggleLock(): Call<LockResponse>
@FormUrlEncoded
@POST("users/register")
fun register(
@Field("user_id") user_id: String,
@Field("registration_id") registration_id: String
): Call<ResponseBody>
}
data class LockResponse(val status: String, val body: LockState)
data class LockState(val id: Int, val state: String, val created_at: Date) {
companion object {
const val OPEN = "open"
const val CLOSED = "closed"
fun fromJson(json: String): LockState? = try {
ApiClient.GSON.fromJson<LockState>(json, LockState::class.java)
} catch (e: JsonSyntaxException) {
e.printStackTrace()
null
}
}
fun isOpen(): Boolean {
return OPEN.equals(state)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment