Room Database - Registrasi Siswa
Nama : Rafaela Shyra Ashma' Ramadhani
NRP : 5025231217
Kelas : Pemrograman Perangkat Bergerak - B
Tugas Room Database - Registrasi Siswa
Hasil Aplikasi :
Kode : LinkCode
Penjelasan :
Konsep Dasar
Aplikasi ini menggunakan Room Database sebagai solusi penyimpanan data lokal, sesuai materi dari dosenmu. Room berperan sebagai abstraction layer di atas SQLite, sehingga kita tidak perlu menulis query SQL secara manual. Dalam project ini, Room diimplementasikan melalui tiga komponen utama: Entity, DAO, dan Database.
Entity —
Siswa.ktFile ini mendefinisikan struktur tabel di dalam database. Anotasi
@Entity(tableName = "siswa") memberitahu Room untuk membuat sebuah tabel bernama "siswa" di SQLite. Setiap properti dalam data class ini akan menjadi kolom di tabel tersebut. Kolom id diberi anotasi @PrimaryKey(autoGenerate = true), artinya Room akan otomatis mengisi nilai id secara berurutan setiap kali data baru ditambahkan, sehingga kita tidak perlu mengatur id secara manual. Kolom nama dan email adalah data yang akan diisi oleh pengguna melalui form.DAO —
SiswaDao.ktDAO (Data Access Object) adalah antarmuka yang berisi semua operasi yang bisa dilakukan terhadap database. Di sini terdapat empat fungsi yang merepresentasikan operasi CRUD (Create, Read, Update, Delete). Fungsi
insertSiswa dengan anotasi @Insert digunakan untuk menambah data baru, updateSiswa dengan @Update untuk mengubah data yang sudah ada, dan deleteSiswa dengan @Delete untuk menghapus data — ketiganya menggunakan kata kunci suspend karena dijalankan secara asynchronous agar tidak membekukan tampilan aplikasi. Sementara fungsi getAllSiswa menggunakan anotasi @Query dengan perintah SQL SELECT * FROM siswa ORDER BY id DESC untuk mengambil semua data siswa diurutkan dari yang terbaru. Fungsi ini mengembalikan Flow<List<Siswa>>, yang berarti UI akan otomatis diperbarui setiap kali ada perubahan data di database.Database —
AppDatabase.ktFile ini adalah inti dari konfigurasi Room. Anotasi @Database(entities = [Siswa::class], version = 1) mendeklarasikan bahwa database ini memiliki satu tabel dari class Siswa dan berada di versi 1. Class ini bersifat abstract dan mewarisi RoomDatabase, serta memiliki fungsi abstrak siswaDao() yang menjadi jembatan akses ke DAO. Di dalamnya terdapat pola Singleton menggunakan companion object, yang memastikan hanya ada satu instance database yang dibuat selama aplikasi berjalan. Anotasi @Volatile memastikan perubahan pada variabel INSTANCE langsung terlihat oleh semua thread, dan blok synchronized mencegah pembuatan dua instance secara bersamaan ketika ada beberapa thread yang mengakses database sekaligus.
ViewModel —
StudentViewModel.ktViewModel bertugas sebagai jembatan antara data (Room) dan tampilan (UI). Class ini menerima dao sebagai parameter sehingga bisa mengakses semua fungsi database. Properti siswaList mengambil data dari dao.getAllSiswa() dan mengubahnya menjadi StateFlow menggunakan .stateIn(), sehingga UI bisa mengamati perubahan data secara real-time. Setiap fungsi seperti tambahSiswa, hapusSiswa, dan editSiswa dijalankan di dalam viewModelScope.launch — ini adalah coroutine scope yang secara otomatis dibatalkan ketika ViewModel tidak lagi digunakan, sehingga aman dari kebocoran memori.
UI Layer —
MainScreen.kt, FormInput.kt, StudentItem.ktLapisan UI dibangun menggunakan Jetpack Compose. FormInput.kt menampilkan dua field input (nama dan email) beserta tombol aksi yang teksnya berubah secara dinamis menjadi "Tambah Siswa" atau "Simpan Perubahan" tergantung apakah sedang dalam mode edit atau tidak. StudentItem.kt menampilkan setiap data siswa dalam bentuk Card dengan avatar huruf pertama nama siswa, beserta tombol edit dan hapus. MainScreen.kt adalah pusat koordinasi semua komponen — ia mengamati siswaList dari ViewModel menggunakan collectAsState(), sehingga daftar siswa di layar otomatis terupdate saat data berubah. Validasi input juga dilakukan di sini sebelum data dikirim ke ViewModel, memastikan nama dan email tidak kosong serta email mengandung karakter "@".
Entry Point —
MainActivity.kt
MainActivity adalah titik awal aplikasi. Di sini, database diinisialisasi menggunakan AppDatabase.getDatabase(applicationContext), lalu DAO diambil dari sana. DAO kemudian digunakan untuk membuat StudentViewModel secara manual, yang selanjutnya diteruskan ke MainScreen sebagai parameter. Seluruh tampilan dibungkus dengan TUGAS13_REGISTRASISISWATheme agar tema warna yang sudah kamu atur di Color.kt dan Theme.kt tadi berlaku ke seluruh aplikasi.




Komentar
Posting Komentar