Menampilkan data dari database mysql ke recyclerview android studio

Dari tutorial yang sebelumnya kita sudah belajar bagaimana membuat login dengan database Mysql menggunakan sebuah web service. Nah disini kita akan mencoba menampilkan data MySql di android studio dengan menggunakan cardview dan RecircleView .

Ok sebelum melaanjutkan ke materi ini silahkan bagi yang belum mengikuti tutorial sebelumnya agar meencoba terlebih dahulu secara urut, karena tutorial ini lanjutan dari tutrial kemarin antara lain urut :

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.


Menampilkan data dari database mysql ke recyclerview android studio



Mempersiapkan API

Sebelumnya, kita perlu mempersiapkan API yang akan kita gunakan. Funtechsy sudah memberikan tutorial tentang cara membuat rest api menggunakan node js + mysql. Pada tutorial kali ini, kita akan menggunakan api tersebut. Silahkan dibaca dan dibuat dulu api nya ya.


Menginstall Dependency

Buka Build.Gradle kalian, tambahkan dependensi berikut di baris akhir.


//Retrofit

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'

    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'


    //OkHttp

    implementation 'com.squareup.okhttp3:logging-interceptor:4.9.2'


Membuat Layout


Kita perlu 2 layout antara lain layout untuk mainactivity dan layout untuk recycler view nya nanti.


Layout Main Activity

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    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"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:orientation="vertical"

    >


    <androidx.appcompat.widget.Toolbar

        android:id="@+id/tbMain"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:background="@color/purple_500"

        >


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="horizontal"

            >


            <TextView

                android: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.RecyclerView

        android: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"

    >


    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="horizontal"

        android:layout_margin="10dp"

        android:weightSum="4"

        >


        <ImageView

            android: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"

            />


        <LinearLayout

            android:layout_weight="3"

            android:layout_width="0dp"

            android:layout_height="match_parent"

            android:orientation="vertical"

            android:gravity="center"

            >


            <TextView

                android:id="@+id/tv_name"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:text="Alfansyah"

                android:textSize="16sp"

                />


            <TextView

                android:id="@+id/tv_age"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:text="20 Tahun"

                />


            <TextView

                android: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


Buat sebuah class baru bernama ResponseModel, class ini nantinya akan kita gunakan untuk deserialization dari response json dari API.


ResponseModel

package com.example.androidstudents


data 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


Buatlah sebuah class baru bertipe Interface beri nama RService


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: RService

    get() {

        val interceptor = HttpLoggingInterceptor()

        interceptor.level = HttpLoggingInterceptor.Level.BODY

        val 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

Adapter berfungsi untuk menjembatani antara data dari MainActivity ke dalam Layout.

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.tvName

        val tvAge = binding.tvAge

        val tvGender = binding.tvGender

        val 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].name

        holder.tvAge.text = datas[position].age.toString()

        holder.tvGender.text = datas[position].gender

    }


    override fun getItemCount(): Int  = datas.size


    fun setData(data: ArrayList<ResponseModel.Students>){

        datas.clear()

        datas.addAll( data )

        notifyDataSetChanged()

    }

}


Membuat MainActivity


Di MainActivity, kita menginisiasikan class recycler view, class adapter, dan membuat fungsi dari retrofit client untuk mengambil data dari API. Selanjutnya, data response tersebut disalurkan ke adapter untuk ditempel ke dalam view layout.

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    private lateinit var adapter: RVAdapter


    override 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 = adapter

        getStudents()

    }


    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

Menampilkan data dari database mysql ke recyclerview android studio



Selesai, kita sudah berhasil menampilkan data dari API Node JS ke dalam recyclerview di android kotlin menggunakan android studio.



Silahkan jika ada yang ingin ditanyakan atau kritik dan saran bisa disampaikan lewat kolom komentar ya, terimakasih sudah mengunjungi artikel ini. Sampai jumpa kembali.