Cara Membuat Read Detail Data pada Room Database


Assalamualaikum Warahmatullahi Wabarakatuh.

Sebelumnya kita sudah mempelajari step-by-step pembuatan aplikasi CRUD SQLite menggunakan Room Database Library. Untuk itu saya harap kalian sudah mengikuti tutorial yang saya berikan sebelumnya. Pada seri terakhir ini kita akan belajar bagaimana cara menampilkan secara detail dari data yang telah dimasukan kedalam Database.


Karena aplikasi yang akan kita buat yaitu daftar Mahasiswa, jadi Detail data yang akan ditampilkan berdasarkan NIM dari Mahasiswa tersebut. Tutorial ini berhubungan erat dengan tutorial yang pernah bahas sebelumnya. kalian bisa melihatnya dibawah ini.

Materi yang harus kalian pelajari sebelumnya:
  1. Mengimport Library Room Database
  2. Belajar Membuat Entity, DAO dan Database Menggunakan Room Library
  3. Cara Membuat Fungsi Read Data pada Room Database
  4. Cara Membuat Fungsi Edit Data pada Room Database
  5. Cara Membuat Fungsi Delete Data pada Room Database

Bagi yang belum tahu apa itu Room Database, Room Database adalah sebuah library yang digunakan untuk membuat aplikasi CRUD yang lebih efisien dan fleksibel dibandingkan dengan menggunakan SQLite secara langsung.

Cara Membuat Read Detail Data pada Room Database

1) Pertama buka kembali interface MahasiswaDAO.java, disini kita tambahkan method baru bernama selectDetailMahasiswa(), pada method tersebut kita meggunakan Annotation @Query dari Room Database, pada Query tersebut kita mengambil data dari tabel mahasiswa berdasarkan NIM-nya.
package com.wildan.crudroomdatabase.data;

//========== WILDAN TECHNO ART ==========//
//======= Cianjur Apps Developer ========//

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;

import com.wildan.crudroomdatabase.model.Mahasiswa;

@Dao
public interface MahasiswaDAO {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertMahasiswa(Mahasiswa mahasiswa);

    @Query("SELECT * FROM tMahasiswa")
    Mahasiswa[] readDataMahasiswa();

    @Update
    int updateMahasiswa(Mahasiswa mahasiswa);

    @Delete
    void deleteMahasiswa(Mahasiswa mahasiswa);

    @Query("SELECT * FROM tMahasiswa WHERE nim_mahasiswa = :nim LIMIT 1")
    Mahasiswa selectDetailMahasiswa(String nim);
}
Karena NIM kita menggunakan tipe data String, jadi parameter didalam method tersebut kita gunakan String.

2) Jika sudah, selanjutnya buat activity baru bernama DetailDataActivity, activity ini digunakan untuk menampilkan detail dari data yang user pilih pada RecyclerView.
<?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"
    android:layout_margin="12dp"
    android:orientation="vertical"
    tools:context="com.wildan.crudroomdatabase.ui.DetailDataActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="Detail Data"
        android:textAlignment="center"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="NIM"
        android:textSize="15sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/myNIM"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:enabled="false"
        android:inputType="textPersonName" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Nama"
        android:textSize="15sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/myName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:enabled="false"
        android:inputType="textPersonName" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Jurusan"
        android:textSize="15sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/myJurusan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:enabled="false"
        android:inputType="textPersonName" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Tanggal Lahir"
        android:textSize="15sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/myTanggalLahir"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:enabled="false"
        android:inputType="textPersonName" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Jenis Kelamin"
        android:textSize="15sp"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/myJenisKelamin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:enabled="false"
        android:inputType="textPersonName" />

</LinearLayout>
Data tersebut akan ditampilkan pada EditText yang sudah kita set menjadi false, tapi kalian dapat menyesuaikan tampilkannya sendiri.

View:


3) Seperti biasa kita akan membuat data flow untuk read detail data pada adapter dari RecyclerView, buka class RecyclerMahasiswaAdapter.java, pada method onBindViewHolder() tambahkan onClickListener pada widget CardView (item) kita, untuk memberi aksi saat salah satu item diklik.
@SuppressLint("RecyclerView")
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {

    //Deklarasi Variable untuk mendapatkan data dari Database melalui Array
    final String getNIM = daftarMahasiswa.get(position).getNim();
    final String getNama = daftarMahasiswa.get(position).getNama();

    //Menampilkan data berdasarkan posisi Item dari RecyclerView
    holder.Nim.setText(getNIM);
    holder.Nama.setText(getNama);

    holder.item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Mahasiswa mahasiswa = appDatabase.mahasiswaDAO()
                    .selectDetailMahasiswa(daftarMahasiswa.get(position).getNim());
            context.startActivity(new Intent(context, DetailDataActivity.class).putExtra("detail", mahasiswa));
        }
    });
Coba kalian perhatikan didalam method onClickListener() tersebut, kita memanggil method selectDetailMahasiswa() dari interface DAO, method tersebut akan mengambil data dari item yang kita klik, berdasarkan data NIM-nya, lalu mengimnya pada class DetailDataActivity menggunakan Intent.

4) Terakhir buka class DetailDataActivity.java, pada class ini akan menampilkan data secara detail dari item yang dipilih oleh user pada RecyclerView
package com.wildan.crudroomdatabase.ui;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;

import com.wildan.crudroomdatabase.R;
import com.wildan.crudroomdatabase.model.Mahasiswa;

public class DetailDataActivity extends AppCompatActivity {

    private EditText getNIM, getName, getJurusan, getTanggalLahir, getJenisKelamin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_data);
        getNIM = findViewById(R.id.myNIM);
        getName = findViewById(R.id.myName);
        getJurusan = findViewById(R.id.myJurusan);
        getTanggalLahir = findViewById(R.id.myTanggalLahir);
        getJenisKelamin = findViewById(R.id.myJenisKelamin);

        getDetailData();
    }

    //Mendapatkan data yang akan ditampilkan secara detail
    private void getDetailData(){
        Mahasiswa mahasiswa = (Mahasiswa)getIntent().getSerializableExtra("detail");

        //Menampilkan data Mahasiswa pada activity
        if(mahasiswa != null){
            getNIM.setText(mahasiswa.getNim());
            getName.setText(mahasiswa.getNama());
            getJurusan.setText(mahasiswa.getJurusan());
            getTanggalLahir.setText(mahasiswa.getTanggalLahir());
            getJenisKelamin.setText(mahasiswa.getJenisKelamin());
        }
    }
}
Didalam method getDetailData(), kita menggunakan intent untuk menerima data yang dikirim lalu menampilkannya pada widget-widget EditText yang secara default sudah kita set menjadi false.

Demo:


Alhamdullilah selesai sudah pembuatan aplikasi CRUD SQLite menggunakan Room Database Library. Mohon maaf bila ada kesalahan, jika ada yang ingin ditanyakan, kritik atau saran. silakan isi kolom komentar dibawah ini, saya dengan senang hati akan membalasnya.

Project tersebut dapat kalian download di akun Github saya. Silakan Download Disini.

Wassalamualaikum Warahmatullahi Wabarakatuh.

Wildan M Athoillah
Wildan M Athoillah Blogger dan spesialis pembuat aplikasi android.