Skip to content

Instantly share code, notes, and snippets.

@ankitchauhan20
Created June 29, 2022 10:21
Show Gist options
  • Save ankitchauhan20/245451fda2fa17d98df3ecb77f06ae9f to your computer and use it in GitHub Desktop.
Save ankitchauhan20/245451fda2fa17d98df3ecb77f06ae9f to your computer and use it in GitHub Desktop.
Retrofit Get In Kotlin
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BannerMainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/frameLayout"
android:name="com.example.kotlintutorial.BannerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
package com.example.kotlintutorial
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class ApiClient {
val BASE_URL: String = "http://14.142.204.101:9900/"
var retrofit: Retrofit? = null
fun getApiClient(): Retrofit? {
if (retrofit == null) {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val builder = OkHttpClient.Builder()
.addInterceptor(interceptor)
.addInterceptor { chain ->
val request = chain.request().newBuilder()
.addHeader("AUTH_TOKEN", "C7jGJZho7/ptHX+vbYGt+A==")
.addHeader("Content-Type", "application/json")
.addHeader("DEVICE_ID", "dUwTB2fzTjKDdDTdW69lrc")
.addHeader("ANDROID_DEVICE_ID", "5b39185c0342d9f9")
.addHeader("COUNTRY", "India")
.addHeader("CITY", "Noida")
.addHeader("LANGUAGE", "EN")
.addHeader("ANDROID_DEVICE_ID", "5b39185c0342d9f9")
.build()
chain.proceed(request)
}
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
return retrofit
}
}
package com.example.kotlintutorial
import retrofit2.Call
import retrofit2.http.GET
interface ApiInterface {
@GET("cans/tt/rest/api/sec/v6/Coupons.json/All")
fun getBanner(): Call<BannerPojo>
}
package com.example.kotlintutorial
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.kotlintutorial.databinding.DataItemBinding
class BannerAdapter(var list: ArrayList<CountryBanner>) : RecyclerView.Adapter<BannerAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = DataItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = list[position]
holder.binding.bannerName.text = item.bannerId.toString()
Glide.with(holder.itemView.context)
.load(item.bannerImageUrl)
.into(holder.binding.bannerImage)
}
override fun getItemCount(): Int {
return list.size
}
class ViewHolder (val binding: DataItemBinding) : RecyclerView.ViewHolder(binding.root){
}
}
package com.example.kotlintutorial
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.kotlintutorial.databinding.FragmentBannerBinding
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class BannerFragment : Fragment() {
var binding: FragmentBannerBinding? = null
var arrayList: ArrayList<CountryBanner> = ArrayList()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentBannerBinding.inflate(inflater, container, false)
getBannerData()
return binding!!.root
}
private fun getBannerData() {
val apiInterface: ApiInterface = ApiClient().getApiClient()!!.create(ApiInterface::class.java)
val call = apiInterface.getBanner()
call.enqueue(object : Callback<BannerPojo> {
override fun onResponse(call: Call<BannerPojo>, response: Response<BannerPojo>) {
Log.e("ss", "Success $response")
val data = response.body()
arrayList = data?.countryBanner as ArrayList<CountryBanner>
binding?.recyclerView?.layoutManager = LinearLayoutManager(activity)
binding?.recyclerView?.adapter = BannerAdapter(arrayList)
}
override fun onFailure(call: Call<BannerPojo>, t: Throwable) {
Log.e("ss", "fail ${t.message}")
}
})
}
}
package com.example.kotlintutorial
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.kotlintutorial.databinding.ActivityMainBannerBinding
class BannerMainActivity : AppCompatActivity() {
var binding: ActivityMainBannerBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main_banner)
}
}
package com.example.kotlintutorial
import com.google.gson.annotations.SerializedName
data class BannerPojo(
@SerializedName("applicableCoupons")
val meraData: Any,
val brands: Any,
val cityBanner: List<Any>,
@SerializedName("countryBanner")
val countryBanner: List<CountryBanner>,
val coupons: List<Any>,
val storeCoupons: Any,
val viewAllCouponImage: String
)
package com.example.kotlintutorial
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class CountryBanner(
val available: Boolean,
val bannerId: Int,
val bannerImageUrl: String,
val banner_id: Int,
val id: Int,
val linkTo: String,
val linkToUrl: String
):Parcelable
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/banner_image"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:layout_marginHorizontal="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/banner_Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Name"
android:textSize="20dp"
android:textColor="@color/white"
android:layout_marginVertical="5dp"
android:layout_marginHorizontal="10dp"
android:background="#5565F6"
android:gravity="center_horizontal"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@+id/banner_image"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BannerFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment