Cara Membuat Fungsi Edit Data pada Room Database
Assalamualaikum Warahmatullahi Wabarakatuh.
Pada seri ke 5 mengenai tutorial membuat aplikasi CRUD menggunakan Room Database, di seri ini kita akan belajar cara menggunakan fungsi edit data pada Room Database. Seperti SQLite pada umumnya, didalam Room Databas kita juga dapat mengubah data sebelumnya menjadi data yang baru hanya saja pada Room Database penggunaan Edit data lebih mudah dan fleksibel dibandingkan dengan SQLite secara langsung.
Disini kita akan melanjutkan tutorial sebelumnya mengenai penggunaan fungsi read data pada Room Database. karena tutorial ini berkaitan erat dengan tutorial yang pernah saya posting sebelumnya, jadi saya sarankan kalian sudah mengikuti materi / tutorial tersebut.
Materi yang harus kalian pelajari sebelumnya:
Untuk membuat fungsi Update Data, pada project ini pertama kita akan membuat layout activity baru untuk proses editing data, activity ini akan menerima data yang telah dipilih oleh user lalu user dapat mengubah data tersebut didalam activity tersebut lalu menyimpannya kembali.
Pada method tersebut kita tambahkan Annotation @Update bawaan dari library Room Database, method ini berfungsi untuk mengedit data didalam Database.Materi yang harus kalian pelajari sebelumnya:
- Belajar Membuat Aplikasi CRUD SQLite Database di Android Studio
- Mengimport Library Room Database
- Belajar Membuat Entity, DAO dan Database Menggunakan Room Library
- Cara Membuat Fungsi Read Data pada Room Database
Untuk membuat fungsi Update Data, pada project ini pertama kita akan membuat layout activity baru untuk proses editing data, activity ini akan menerima data yang telah dipilih oleh user lalu user dapat mengubah data tersebut didalam activity tersebut lalu menyimpannya kembali.
Cara Membuat Fungsi Edit Data pada Room Database
1) Pertama buka kembali interface MahasiswaDAO.java, disini kita tambahkan method baru bernama updateMahasiswa().package com.wildan.crudroomdatabase.data;
//========== WILDAN TECHNO ART ==========//
//======= Cianjur Apps Developer ========//
import android.arch.persistence.room.Dao;
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);
}
2) Jika sudah, selanjutnya buat activity baru bernama EditActivity, activity ini digunakan sebagai form edit dari data yang akan diubah oleh user.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_margin="16dp"
android:orientation="vertical"
tools:context="com.wildan.crudroomdatabase.ui.EditActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Edit Data"
android:textSize="18sp"
android:textStyle="bold" />
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/nama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/jurusan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Jurusan" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout4"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/tanggal_lahir"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Tanggal lahir" />
</android.support.design.widget.TextInputLayout>
<RadioGroup
android:id="@+id/jenis_kelamin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/laki_laki"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Laki Laki" />
<RadioButton
android:id="@+id/perempuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:text="Perempuan" />
</RadioGroup>
<Button
android:id="@+id/save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Simpan"/>
</LinearLayout>
View:Tampilannya mirip dengan Activity untuk input data, hanya saja disini kita menghilangkan NIM, karena NIM sebagai Primary Key tidak akan kita ubah.
3) Berikutnya buka class adapter kalian bernama RecyclerMahasiswaAdapter.java, disini kita tambahkan method baru bernama onEditData serta tambahkan onLongClickListener pada widget CardView, sehingga saat user menekan salah satu item maka akan muncul menu pilihan yatu Edit dan Delete.
@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.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
CharSequence[] menuPilihan = {"Edit", "Delete"};
AlertDialog.Builder dialog = new AlertDialog.Builder(v.getContext())
.setTitle("Pilih Aksi")
.setItems(menuPilihan, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case 0:
/*
Menjalankan Perintah Edit Data
Menggunakan Bundle untuk mengambil data yang akan Diedit
*/
onEditData(position, context);
break;
case 1:
/*
Menjalankan Perintah Delete Data
Akan dibahas pada Tutorial selanjutnya
*/
break;
}
}
});
dialog.create();
dialog.show();
return true;
}
});
}
//Mengirim Data yang akan diedit dari ArrayList berdasarkan posisi item pada RecyclerView
private void onEditData(int position, Context context){
context.startActivity(new Intent(context, EditActivity.class).putExtra("data", daftarMahasiswa.get(position)));
((Activity)context).finish();
}
Didalam metho onEditData(), kita akan mengirim data mahasiswa yang dipilih oleh user menggunakan Intent pada EditDataActivity.Lalu didalam onLongClickListener, disini kita menggunkan AlertDialog.Builder untuk menampilkan menu pilihan berupa Edit dan Delete, saat menu Edit di klik maka method onEditData akan berjalan dan menuju form activity untuk edit data.
4) Terakhir buka class EdtActivity.java, disini kita akan memanggil method updateMahasiswa(), untuk mengedit data yang diubah.
package com.wildan.crudroomdatabase.ui;
import android.annotation.SuppressLint;
import android.arch.persistence.room.Room;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.design.widget.TextInputEditText;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import com.wildan.crudroomdatabase.R;
import com.wildan.crudroomdatabase.data.factory.AppDatabase;
import com.wildan.crudroomdatabase.model.Mahasiswa;
public class EditActivity extends AppCompatActivity {
//Deklarasi Variable
private TextInputEditText Nama, Jurusan, tanggalLahir;
private AppDatabase database;
private Button bSimpan;
private RadioButton lakiLaki, perempuan;
private RadioGroup jenisKelamin;
private String myJenisKelamin;
private Mahasiswa mahasiswa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
Nama = findViewById(R.id.nama);
Jurusan = findViewById(R.id.jurusan);
tanggalLahir = findViewById(R.id.tanggal_lahir);
jenisKelamin = findViewById(R.id.jenis_kelamin);
lakiLaki = findViewById(R.id.laki_laki);
perempuan = findViewById(R.id.perempuan);
bSimpan = findViewById(R.id.save);
database = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "dbMahasiswa").build();
//Menampilkan data mahasiswa yang akan di edit
getDataMahasiswa();
bSimpan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mahasiswa.setNama(Nama.getText().toString());
mahasiswa.setJurusan(Jurusan.getText().toString());
mahasiswa.setTanggalLahir(tanggalLahir.getText().toString());
mahasiswa.setJenisKelamin(myJenisKelamin);
updateData(mahasiswa);
}
});
}
//Method untuk menapilkan data mahasiswa yang akan di edit
private void getDataMahasiswa(){
//Mendapatkan data dari Intent
mahasiswa = (Mahasiswa)getIntent().getSerializableExtra("data");
Nama.setText(mahasiswa.getNama());
Jurusan.setText(mahasiswa.getJurusan());
tanggalLahir.setText(mahasiswa.getTanggalLahir());
switch (mahasiswa.getJenisKelamin()){
case "Laki-Laki":
lakiLaki.setChecked(true);
myJenisKelamin = "Laki-Laki";
break;
case "Perempuan":
perempuan.setChecked(true);
myJenisKelamin = "Perempuan";
break;
}
}
//Menjalankan method Update Data
@SuppressLint("StaticFieldLeak")
private void updateData(final Mahasiswa mahasiswa){
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... voids) {
//Menjalankan proses insert data
return database.mahasiswaDAO().updateMahasiswa(mahasiswa);
}
@Override
protected void onPostExecute(Integer status) {
//Menandakan bahwa data berhasil disimpan
Toast.makeText(EditActivity.this, "Data Berhasil Diubah", Toast.LENGTH_SHORT).show();
startActivity(new Intent(EditActivity.this, ReadDataActivity.class));
finish();
}
}.execute();
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(EditActivity.this, ReadDataActivity.class));
finish();
}
}
Seperti pada saat input data, pada class ini juga kita menggunakan AsyncTask untuk manjalankan program di latar belakang layar dan mempublikasukan hasilnya. AsyncTask Ini kita gunakan untuk memantau proses saat user menyimpan data baru, jika data berhasil disimpan maka akan muncul pesan Toast.
Demo:
Di seri berikutnya akan membahas mengenai Cara Membuat Fungsi Delete Data pada Room Database. Sekian dari saya, mohon maaf bila ada kesalahan, jika ada yang ingin ditanyaka, silakan isi kolom komentar dibawah ini.
Wassalamualaikum Warahmatullahi Wabarakatuh.