Cover image for Kine — Android/Kotlin Networking in 2020

Kine — Android/Kotlin Networking in 2020

ankitagrawal967 profile image AnkitAgrawal967 ・2 min read

Kine — Android/Kotlin Networking in 2020

Wait what? another networking library? don’t we have enough networking library already, I am sure you must be thinking that, you will found out soon enough why

Kine is a 100% pure kotlin networking library that is crazy extendable unlike most other library.

Kine even allows you choose a HttpClient of your choice , a feature retrofit used to provide before 2.x.

Kine supports gson,moshi, okhttp 4x,okhttp 3x,rxjava2, rxjava3, coroutine with ability to support any other library or plugin easily

Let us see some examples :-

For get request:-

val response = "https://example/api/test".httpGet().responseAs(String::class.java)

That’s it, a one liner for a simple get synchronous request

What about asynchronous?

"https://example/api/test".httpGet().responseAs(String::class.java,{ response->
val response = response.body
}, { e ->

As simple as synchronous request

What about POST and other?

"https://example/api/test".httpPost(JSONObject().put("name", "yodo").put("job", "test")).responseAs(JSONObject::class.java, { response ->
responseTextView.text = response.body.toString()
}, { e ->
responseTextView.text = e.message()

That’s it

What about RxJava?, Here you go:-

.subscribe(object:SingleObserver<KineResponse<JsonObject>?> {
override fun onSubscribe(d: Disposable) {
override fun onSuccess(response: KineResponse<JsonObject>) {
val response = response.body.toString()
override fun onError(e: Throwable) {


GlobalScope.launch(Dispatchers.Main) {
val response = "https://example/api/test".httpGet().responseAsCoroutine(JsonObject::class.java)

Don’t use GlobalScope in real application , you appropriate scope

Load Bitmap?

"https://example/api/test/files/abc.png".loadBitmapResponseFromUrl( { response ->
}, { e -> e.printStackTrace() })

What if you want to bind to ImageView directly?


What about Gson/Moshi support?

"https://example/api/test".httpGet().responseAs(YourCustomPojoClass::class.java,{ response->
val response = response.body
}, { e ->

Library auto detect if Gson/Moshi kine dependency is there and install the converter for it .

What if we want to use gson/moshi both in our project?

"https://example/api/test".httpGet().converter(GsonConverter()).responseAs(YourCustomPojoClass::class.java,{ response->
val response = response.body
}, { e ->

You can use the individual request converter() method to specify converter for a specific request

What if we have our own gson custom adapters and other customization, how do we specify it?

GsonConverter/MoshiConverter takes a gson/moshi instance as a parameter , you can create your gson/moshi instance and pass it there.

You can check the rest on the Project github page: https://github.com/AnkitAgrawal967/Kine

You can also read this on my personal blog :


Feel free to comment here or create a new issue on github for feature request or bugs or api suggestion

Posted on by:

ankitagrawal967 profile



Passionate Android developer with 9 years of experience


markdown guide