Cara Menampilkan Data dari API ke RecyclerView Android Kotlin - Assalamualaikum, pada tutorial kali ini kita akan kembali mempelajari soal API pada pemrograman android. API atau Applicaiton Programming Interface bisa dibilang merupakan sebuah perantara antara aplikasi dengan database. Pada artikel ini, akan diajarkan cara menampilkan data tersebut ke dalam sebuah recycler view.
RecyclerView merupakan sebuah komponen view pada pemrograman android yang bisa diulang penggunaannya / penampilannya. RecylerView membutuhkan sebuah adapter untuk menjembatani data dengan view di android.
Mari kita ke tutorial nya.
Mempersiapkan API
Menginstall Dependency
//Retrofitimplementation 'com.squareup.retrofit2:retrofit:2.9.0'implementation 'com.squareup.retrofit2:converter-gson:2.9.0'//OkHttpimplementation 'com.squareup.okhttp3:logging-interceptor:4.9.2'
Membuat Layout
Layout Main Activity
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"><androidx.appcompat.widget.Toolbarandroid:id="@+id/tbMain"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/purple_500"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Android Students"style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"android:textColor="@color/white"/></LinearLayout></androidx.appcompat.widget.Toolbar><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:listitem="@layout/items_main"></androidx.recyclerview.widget.RecyclerView></LinearLayout>
Layout Items ( Recycler View )
<?xml version="1.0" encoding="utf-8"?><androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="100dp"xmlns:app="http://schemas.android.com/apk/res-auto"app:cardCornerRadius="7dp"app:cardElevation="7dp"android:id="@+id/cv_main"android:layout_margin="10dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:layout_margin="10dp"android:weightSum="4"><ImageViewandroid:id="@+id/iv_main"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent"android:src="@drawable/ic_baseline_account_box_24"/><LinearLayoutandroid:layout_weight="3"android:layout_width="0dp"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><TextViewandroid:id="@+id/tv_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Alfansyah"android:textSize="16sp"/><TextViewandroid:id="@+id/tv_age"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="20 Tahun"/><TextViewandroid:id="@+id/tv_gender"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Pria"/></LinearLayout></LinearLayout></androidx.cardview.widget.CardView>
Membuat Model Data Class
ResponseModel
package com.example.androidstudentsdata class ResponseModel(val status: Boolean,val data: ArrayList<Students>,val msg: String,){data class Students(val id: Int,val name: String,val age: Int,val gender: String,)}
Membuat Retrofit Service dan Retrofit Client
RService.kt
interface RService {@GET("siswa")fun getStudents(): Call<ResponseModel>}
Kemudian buatlah sebuah class baru bertipe Object beri nama RClient
RClient
object RClient {private const val BASE_URL = "http://10.0.2.2:3000/"val rService: RServiceget() {val interceptor = HttpLoggingInterceptor()interceptor.level = HttpLoggingInterceptor.Level.BODYval client = OkHttpClient.Builder().addInterceptor(interceptor).build()val retrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).client(client).build()return retrofit.create( RService::class.java )}}
Membuat RecyclerView Adapter
RVAdapter.kt
class RVAdapter(private val datas: ArrayList<ResponseModel.Students>, val ctx: Context):RecyclerView.Adapter<RVAdapter.MyViewHolder>() {class MyViewHolder(view: View): RecyclerView.ViewHolder(view){val binding = ItemsMainBinding.bind(view)val tvName = binding.tvNameval tvAge = binding.tvAgeval tvGender = binding.tvGenderval cvMain = binding.cvMain}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {val itemView = LayoutInflater.from(parent.context).inflate(R.layout.items_main, parent, false)return MyViewHolder(itemView)}override fun onBindViewHolder(holder: MyViewHolder, position: Int) {holder.tvName.text = datas[position].nameholder.tvAge.text = datas[position].age.toString()holder.tvGender.text = datas[position].gender}override fun getItemCount(): Int = datas.sizefun setData(data: ArrayList<ResponseModel.Students>){datas.clear()datas.addAll( data )notifyDataSetChanged()}}
Membuat MainActivity
MainActivity.kt
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingprivate lateinit var adapter: RVAdapteroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)adapter = RVAdapter(arrayListOf(), this@MainActivity)binding.rvMain.layoutManager = LinearLayoutManager(this)binding.rvMain.setHasFixedSize(true)binding.rvMain.adapter = adaptergetStudents()}fun getStudents(){RClient.rService.getStudents().enqueue(object : Callback<ResponseModel> {override fun onResponse(call: Call<ResponseModel>, response: Response<ResponseModel>) {if( response.isSuccessful ){val data = response.body()if( data != null ){setData(data.data)}}}override fun onFailure(call: Call<ResponseModel>, t: Throwable) {Log.d("Error Get", ""+t.stackTraceToString())}})}fun setData(data: ArrayList<ResponseModel.Students>){adapter.setData( data )}}
Hasil Aplikasi
Silahkan jika ada yang ingin ditanyakan atau kritik dan saran bisa disampaikan lewat kolom komentar ya, terimakasih sudah mengunjungi artikel ini. Sampai jumpa kembali.
comment 0 komentar
more_vert