Skip to content

Instantly share code, notes, and snippets.

@ankitchauhan20
Created July 19, 2022 04:20
Show Gist options
  • Save ankitchauhan20/d8d413846c3b0c93f53f47befa0baf5a to your computer and use it in GitHub Desktop.
Save ankitchauhan20/d8d413846c3b0c93f53f47befa0baf5a to your computer and use it in GitHub Desktop.
Api with Obserable
<?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=".presentation.view.activity.RxJavaActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rxRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
<?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"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.cardview.widget.CardView
android:layout_width="300dp"
android:layout_height="170dp"
android:layout_margin="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/rx_Image"
android:layout_width="220dp"
android:layout_height="100dp"
android:layout_margin="5dp"
android:src="@drawable/burger"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rx_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="aaaaa"
android:textSize="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/rx_Image"
app:layout_constraintBottom_toTopOf="@id/rx_linkTo"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/rx_linkTo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="aaaaaa"
android:textSize="15dp"
app:layout_constraintTop_toBottomOf="@id/rx_id"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
package com.example.kotlintutorial.application.network
import com.example.kotlintutorial.dataModel.model.RxBannerResponse
import com.example.kotlintutorial.dataModel.model.RxCountryBanner
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.GET
interface RxAPI {
@GET("cans/tt/rest/api/sec/v6/Coupons.json/All")
fun getAllData(): Observable<RxBannerResponse>
}
package com.example.kotlintutorial.presentation.view.adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.example.kotlintutorial.R
import com.example.kotlintutorial.dataModel.model.RxCountryBanner
import com.example.kotlintutorial.databinding.RxDataItemsBinding
class RxBannerAdapter(): RecyclerView.Adapter<RxBannerAdapter.ViewHolder>() {
var dataBinding: RxDataItemsBinding? = null
var bannerList: List<RxCountryBanner>? = emptyList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
dataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.context), R.layout.rx_data_items, parent, false)
return ViewHolder(dataBinding!!)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val countryBanner = bannerList!![position]
holder.bindData(countryBanner)
}
override fun getItemCount(): Int {
return bannerList!!.size
}
fun setData(list: List<RxCountryBanner>){
this.bannerList = list
notifyDataSetChanged()
}
class ViewHolder(val binding: RxDataItemsBinding):RecyclerView.ViewHolder(binding.root) {
fun bindData(countryBanner: RxCountryBanner){
binding.rxId.text = countryBanner.bannerId.toString()
binding.rxLinkTo.text = countryBanner.linkTo
Glide.with(itemView.context)
.load(countryBanner.bannerImageUrl)
.into(binding.rxImage)
}
}
}
package com.example.kotlintutorial.dataModel.model
import com.google.gson.annotations.SerializedName
data class RxBannerResponse(
@SerializedName("applicableCoupons")
val applicableCoupons: Any,
val brands: Any,
val cityBanner: List<Any>,
@SerializedName("countryBanner")
val countryBanner: List<RxCountryBanner>,
val coupons: List<Any>,
val storeCoupons: Any,
val viewAllCouponImage: String
)
package com.example.kotlintutorial.dataModel.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class RxCountryBanner(
val available: Boolean,
val bannerId: Int,
val bannerImageUrl: String,
val id: Int,
val linkTo: String,
val linkToUrl: String
): Parcelable
package com.example.kotlintutorial.presentation.view.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.kotlintutorial.R
import com.example.kotlintutorial.application.network.RxAPI
import com.example.kotlintutorial.application.network.RxRetrofit
import com.example.kotlintutorial.dataModel.model.RxBannerResponse
import com.example.kotlintutorial.dataModel.model.RxCountryBanner
import com.example.kotlintutorial.databinding.ActivityRxJavaBinding
import com.example.kotlintutorial.presentation.view.adapter.RxBannerAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.schedulers.Schedulers
class RxJavaActivity : AppCompatActivity() {
lateinit var binding: ActivityRxJavaBinding
private var rxBannerAdapter : RxBannerAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_rx_java)
rxBannerAdapter = RxBannerAdapter()
binding.rxRecyclerView.adapter = rxBannerAdapter
binding.rxRecyclerView.layoutManager = LinearLayoutManager(this@RxJavaActivity)
val compositeDisposable = CompositeDisposable()
compositeDisposable.add(getObserable().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
val data = response as RxBannerResponse
getObserver(data.countryBanner)
},
{ t -> onFailure(t) }
)
)
}
private fun getObserable(): Observable<RxBannerResponse> {
val api: RxAPI = RxRetrofit().getData()!!.create(RxAPI::class.java)
return api.getAllData()
}
private fun getObserver(list: List<RxCountryBanner>) {
if (list != null && list.isNotEmpty()) {
rxBannerAdapter?.setData(list)
}
}
private fun onFailure(t: Throwable) {
Toast.makeText(applicationContext, "${t.message}", Toast.LENGTH_SHORT).show()
Log.e("s", "" + t.message)
}
}
package com.example.kotlintutorial.application.network
import hu.akarnokd.rxjava3.retrofit.RxJava3CallAdapterFactory
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class RxRetrofit {
val BASE_URL: String = "http://14.142.204.101:9900/"
var retrofit: Retrofit? = null
fun getData(): Retrofit? {
if (retrofit == null) {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val builder = OkHttpClient.Builder()
.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)
}
.addInterceptor(interceptor)
retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build()
}
return retrofit
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment