<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AnkitAgrawal967</title>
    <description>The latest articles on DEV Community by AnkitAgrawal967 (@ankitagrawal967).</description>
    <link>https://dev.to/ankitagrawal967</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469695%2Ff41226d4-8b06-48cc-ad67-c39bdb139085.png</url>
      <title>DEV Community: AnkitAgrawal967</title>
      <link>https://dev.to/ankitagrawal967</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ankitagrawal967"/>
    <language>en</language>
    <item>
      <title>Kine — Android/Kotlin Networking in 2020</title>
      <dc:creator>AnkitAgrawal967</dc:creator>
      <pubDate>Tue, 15 Sep 2020 20:24:28 +0000</pubDate>
      <link>https://dev.to/ankitagrawal967/kine-android-kotlin-networking-in-2020-2dog</link>
      <guid>https://dev.to/ankitagrawal967/kine-android-kotlin-networking-in-2020-2dog</guid>
      <description>&lt;p&gt;Kine — Android/Kotlin Networking in 2020&lt;/p&gt;

&lt;p&gt;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&lt;/p&gt;

&lt;p&gt;Kine is a 100% pure kotlin networking library that is crazy extendable unlike most other library.&lt;/p&gt;

&lt;p&gt;Kine even allows you choose a HttpClient of your choice , a feature retrofit used to provide before 2.x.&lt;/p&gt;

&lt;p&gt;Kine supports gson,moshi, okhttp 4x,okhttp 3x,rxjava2, rxjava3, coroutine with ability to support any other library or plugin easily&lt;/p&gt;

&lt;p&gt;Let us see some examples :-&lt;/p&gt;

&lt;p&gt;For get request:-&lt;/p&gt;

&lt;p&gt;&lt;code&gt;val response =  "https://example/api/test".httpGet().responseAs(String::class.java)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it, a one liner for a simple get synchronous request&lt;/p&gt;

&lt;p&gt;What about asynchronous?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test".httpGet().responseAs(String::class.java,{ response-&amp;gt;&lt;br&gt;
               val response =  response.body&lt;br&gt;
           }, { e -&amp;gt;&lt;br&gt;
               e.printStackTrace()&lt;br&gt;
           })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As simple as synchronous request&lt;/p&gt;

&lt;p&gt;What about POST and other?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test".httpPost(JSONObject().put("name", "yodo").put("job", "test")).responseAs(JSONObject::class.java, { response -&amp;gt;&lt;br&gt;
 responseTextView.text = response.body.toString()&lt;br&gt;
}, { e -&amp;gt;&lt;br&gt;
    e.printStackTrace()&lt;br&gt;
    responseTextView.text = e.message()&lt;br&gt;
})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it&lt;/p&gt;

&lt;p&gt;What about RxJava?, Here you go:-&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test".httpGet().toSingle(JsonObject::class.java)&lt;br&gt;
            .subscribeOn(Schedulers.io())&lt;br&gt;
            .observeOn(AndroidSchedulers.mainThread())&lt;br&gt;
         .subscribe(object:SingleObserver&amp;lt;KineResponse&amp;lt;JsonObject&amp;gt;?&amp;gt; {&lt;br&gt;
                override fun onSubscribe(d: Disposable) {&lt;br&gt;
                }&lt;br&gt;
                override fun onSuccess(response: KineResponse&amp;lt;JsonObject&amp;gt;) {&lt;br&gt;
                    val response = response.body.toString()&lt;br&gt;
                }&lt;br&gt;
                override fun onError(e: Throwable) {&lt;br&gt;
                    e.printStackTrace()&lt;br&gt;
                }&lt;br&gt;
            })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Coroutines?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GlobalScope.launch(Dispatchers.Main) {&lt;br&gt;
            val response = "https://example/api/test".httpGet().responseAsCoroutine(JsonObject::class.java)&lt;br&gt;
        }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Don’t use GlobalScope in real application , you appropriate scope&lt;/p&gt;

&lt;p&gt;Load Bitmap?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test/files/abc.png".loadBitmapResponseFromUrl( { response -&amp;gt;&lt;br&gt;
            imageView!!.setImageBitmap(response.body)&lt;br&gt;
        }, { e -&amp;gt; e.printStackTrace() })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What if you want to bind to ImageView directly?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;imageView.loadImage("https://example/api/test/file/abc.png",placeHolderResId)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What about Gson/Moshi support?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test".httpGet().responseAs(YourCustomPojoClass::class.java,{ response-&amp;gt;&lt;br&gt;
               val response =  response.body&lt;br&gt;
           }, { e -&amp;gt;&lt;br&gt;
               e.printStackTrace()&lt;br&gt;
           })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Library auto detect if Gson/Moshi kine dependency is there and install the converter for it .&lt;/p&gt;

&lt;p&gt;What if we want to use gson/moshi both in our project?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"https://example/api/test".httpGet().converter(GsonConverter()).responseAs(YourCustomPojoClass::class.java,{ response-&amp;gt;&lt;br&gt;
               val response =  response.body&lt;br&gt;
           }, { e -&amp;gt;&lt;br&gt;
               e.printStackTrace()&lt;br&gt;
           })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use the individual request converter() method to specify converter for a specific request&lt;/p&gt;

&lt;p&gt;What if we have our own gson custom adapters and other customization, how do we specify it?&lt;/p&gt;

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

&lt;p&gt;You can check the rest on the Project github page: &lt;a href="https://github.com/AnkitAgrawal967/Kine"&gt;https://github.com/AnkitAgrawal967/Kine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also read this on my personal blog :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://makingmoneyfromonline.com/2020/08/23/kine-networking-in-2020/"&gt;https://makingmoneyfromonline.com/2020/08/23/kine-networking-in-2020/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to comment here or create a new issue on github for feature request or bugs or api suggestion&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>networking</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
