CategoriesAndroidProgramming

Menyimpan data dengan Room di Android

Teori

Dalam membuat aplikasi Android kita terkadang harus menyimpan data yang dihasilkan dari aplikasi kita, baik tersimpan secara cloud ataupun local. di Android ada 2 library penyimpanan data yang dikenal yaitu SQLite dan Realm namun yang paling sering dipakai adalah SQLite. namun untuk menggunakan SQLite perlu banyak kode yang terkadang membingungkan untuk maintainingnya. karena itu Room diciptakan, Room menggunakan SQLite sebagai core nya namun dengan kode yang lebih simple dan mudah dimengerti.

“Room memberikan lapisan abstraksi pada SQLite untuk memungkinkan akses database yang lancar sekaligus memanfaatkan kemampuan SQLite secara optimal”

source : https://developer.android.com/training/data-storage/room

Room memiliki 3 komponen diantaranya adalah :

  • Database
    berfungsi untuk melakukan koneksi dari device ke database room. menggunakan annotasi @Database. class Database harus memenuhi beberapa syarat diantaranya :
    – harus berupa Abstract Class yang meng extends ke RoomDatabase
    – harus menyertakan entities yang berhubungan dengan Database dan versi dari Database
    – harus berisi Abstract Method yang tidak memiliki argument dan memiliki nilai return class Dao

    contoh dari Database :
  • Entity
    Entity adalah struktur tabel pada database room. disini kita bisa menentukan nama tabel, nama kolom, dan tipe data pada kolom. class Entity menggunakan annotation @Entity, kita tidak boleh menggunakan Object sebagai tipe data dari Entity.

    contoh dari Entity :

kita menggunakan annotation @PrimaryKey untuk membuat primaryKey dari tabel kita, kita juga menggunakan annotation @ColumnInfo untuk mendefinisikan kolom, namun sebenarnya tanpa annotation @ColumnInfo variabel tetap akan dianggap sebagai kolom namun nama dari kolomnya akan mengikuti penamaan variabel. begitupun pada annotation @Entity, jika kita hanya menulis @Entity tanpa menentukan tableName nya maka penamaan dari tabel akan mengikuti nama class nya.

  • Dao
    Dao berisikan metode yang digunakan pada database, atau mungkin bisa dibilang Dao berisikan query-query dari database kita. Dao menggunakan annotation @Dao, Dao harus berupa class interface.

    contoh dari Dao :

disitu kita menggunakan annotation @Query untuk menggunakan Raw Query, @Insert untuk insert data ke database, @Update untuk mengupdate data dari database, dan @Delete untuk menghapus data.

Praktek

oke sekarang kita coba untuk praktek agar lebih paham.
buat satu proyek dengan bahasa kotlin di Android Studio.

pasang library ViewModel, Room, dan dataBinding pada build.gradle (app). disini kita akan menggunakan Architecture Pattern MVVM

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'kotlin-parcelize'
}
 
android {
    ...
    
    // Untuk mengaktifkan fitur viewBinding
    buildFeatures {
        dataBinding true
    }
}
 
dependencies {
    ...
 
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'com.google.android.material:material:1.3.0'
    
    // Library View Model
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'

    // Library Room
    implementation 'androidx.room:room-runtime:2.3.0'
    implementation "androidx.room:room-ktx:2.3.0"
    kapt 'androidx.room:room-compiler:2.3.0'
 
    ...
}

edit layout pada activity_main.xml
kita beri main activity recyclerview dan satu floating action button

tampilan MainActivity

buat juga layout untuk tiap row pada recyclerview

tampilan layout row student

lalu buat satu Activity baru dengan nama AddStudentActivity.
edit layoutnya menjadi seperti berikut :

Sekarang buat Entity nya.
buat satu package baru dengan nama room, lalu didalam package tersebut buat satu class baru dengan nama StudentEntity, extends kan ke Parcelable juga agar kita bisa mengirimkan data antar activity

buat satu interface baru didalam package room dengan nama StudentDao

disitu kita menggunakan suspend function karena kita akan melakukan semua proses pada database secara asynchronous. hal ini diwajibkan untuk room, karena jika tidak menggunakan suspend function akan muncul error saat di run.

lalu setelah itu buat class Database nya.
buat satu class lagi di dalam package room dengan nama AppDatabase

buat satu class lagi di dalam package room dengan nama LocalDataSource untuk mempermudah kita untuk mengakses StudentDao

disitu kita menggunakan CoroutineScope untuk menjalankan suspend function.

Sekarang kita buat Adapter untuk Recyclerview nya.
beri nama StudentAdapter.kt

lalu buat class view model untuk MainActivity, beri nama MainViewModel. didalamnya terdapat function untuk get data dari database

sekarang edit koding pada MainActivity.

disitu terdapat onActivityResult untuk get data dari database setelah terjadi perubahan pada database.
kita juga meng observe data dari variabel students pada MainViewModel lalu memasang data tersebut ke adapter

sekarang kita buat ViewModel untuk AddStudentActivity, beri nama AddStudentViewModel

Setelah itu kita edit koding pada AddStudentActivity

Sekarang kita coba run, jika berhasil maka akan tampil halaman blank dengan floating action button

halamannya kosong karena kita belum menambahkan data, klik tombol tambah untuk menambahkan data.

isi kedua form yang ada, lalu klik simpan

jika berhasil maka akan kembali ke halaman awal dengan recyclerview yang telah terisi. jika kita klik data tersebut maka akan masuk ke AddStudentActivity, namun dengan mode edit.

coba ubah data yang ada maka data akan terupdate dan coba klik hapus maka data akan terhapus dari database.

cukup mudah bukan menggunakan room sebagai penyimpan data persistance di aplikasi Android, kita sebenarnya bisa melakukan migration jika kita ingin merubah struktur Entity atau kita juga bisa menggunakan relation untuk menghubungkan suatu Entity dengan Entity lainnya yang mungkin akan kita bahas di Artikel selanjutnya, tetap stay tune di Blog ini.

Source code dari artikel ini bisa dilihat disini
untuk mempelajari lebih lanjut tentang room bisa dilihat disini

Semoga apa yang saya sampaikan bisa bermanfaat bagi pembaca sekalian, Terima kasih telah mampir.

Published by Ahmad Saifur Ridlo

Android Developer at Algostudio.net

Leave a Reply

Your email address will not be published. Required fields are marked *