Pertemuan 13 - Registrasi Siswa
Aplikasi Registrasi Siswa dengan Room Database dan Jetpack Compose
Nama: Christoforus Indra Bagus Pratama
NRP: 5025231124
Mata Kuliah: Pemrograman Perangkat Bergerak
Tanggal: 20 Mei 2026
Pertemuan: 13
Link: Link Github
1. Deskripsi Aplikasi dan Tujuan Pembuatan
1.1 Deskripsi Umum
Project Pertemuan 13 ini berfokus pada pembuatan aplikasi Registrasi Siswa berbasis Android. Aplikasi memungkinkan pengguna menambahkan data siswa (nama dan email), menampilkan daftar siswa secara real-time, melakukan edit data, serta menghapus data dengan konfirmasi. Aplikasi dibangun dengan Jetpack Compose untuk UI dan Room Database sebagai penyimpanan lokal, sehingga data tetap tersimpan di perangkat.
1.2 Tujuan Pembuatan
Tujuan utama pembuatan aplikasi ini adalah memperdalam konsep berikut:
Menguasai CRUD dengan Room: Memahami proses Create, Read, Update, dan Delete pada database lokal melalui DAO.
Menerapkan arsitektur MVVM: Memisahkan UI dan logika bisnis agar kode lebih terstruktur dan mudah dirawat.
Menggunakan Flow dan StateFlow: Menampilkan data secara reaktif tanpa perlu refresh manual.
Membuat UI modern dengan Compose: Membangun form input, daftar data, dan dialog konfirmasi secara deklaratif.
Menerapkan validasi input: Menjaga kualitas data dengan validasi sederhana sebelum disimpan.
2. Arsitektur Aplikasi (MVVM + Room)
2.1 Penjelasan Pola MVVM
MVVM (Model-View-ViewModel) membagi aplikasi menjadi tiga lapisan dengan tanggung jawab yang jelas. Pada project ini, View menampilkan UI dan menerima input, ViewModel mengelola state serta menjalankan logika bisnis, sedangkan Model/Data menangani penyimpanan data melalui Room Database.
2.2 Tiga Lapisan dalam Aplikasi Ini
| Lapisan | File/Class | Tanggung Jawab | Penjelasan |
|---|---|---|---|
| View | MainScreen.kt, FormInput.kt, StudentItem.kt |
Menampilkan UI dan menerima input user | Berisi composable untuk form input, daftar siswa, dan kartu item siswa. |
| ViewModel | StudentViewModel.kt |
Mengelola state UI dan logika bisnis | Mengatur list siswa, proses tambah, edit, dan hapus data melalui DAO. |
| Model/Data | Siswa.kt, SiswaDao.kt, AppDatabase.kt |
Penyimpanan dan akses data | Entity mendefinisikan tabel siswa, DAO menyediakan operasi database, AppDatabase mengelola instance Room. |
2.3 Alur Data Aplikasi
Alur data mengikuti pola satu arah: View → ViewModel → DAO → Room/SQLite, kemudian hasilnya dikembalikan ke ViewModel sebagai state dan UI akan ter-update otomatis melalui Flow/StateFlow.
| Tahap | Komponen | Aksi |
|---|---|---|
| 1 | User / View | User mengisi nama dan email lalu menekan tombol tambah. |
| 2 | MainScreen | Memvalidasi input dan memanggil fungsi ViewModel. |
| 3 | StudentViewModel | Menjalankan operasi insert atau update di dalam coroutine. |
| 4 | SiswaDao | DAO mengeksekusi query insert/update/delete sesuai kebutuhan. |
| 5 | Room/SQLite | Database menyimpan perubahan dan mengirim data terbaru. |
| 6 | Flow/StateFlow | Daftar siswa di-emit ulang dari DAO sebagai Flow. |
| 7 | UI (Compose) | UI melakukan recomposition dan menampilkan data terbaru. |
3. Langkah-Langkah Pembuatan Aplikasi (Detail Implementasi)
3.1 Langkah 1: Persiapan Project
Project dibuat di Android Studio dengan nama Pertemuan 13 dan package com.example.pertemuan13. UI menggunakan Jetpack Compose sebagai pendekatan modern untuk membangun tampilan.
3.2 Langkah 2: Menambahkan Dependency
Pada app/build.gradle.kts, saya menambahkan dependency Room, ViewModel Compose, dan Coroutines agar database dapat bekerja secara asynchronous dan UI tetap responsif.
3.3 Langkah 3: Membuat Entity (Siswa.kt)
Entity Siswa mendefinisikan struktur tabel dengan kolom id, nama, dan email. Field id dibuat auto-generate agar unik untuk setiap siswa.
3.4 Langkah 4: Membuat DAO (SiswaDao.kt)
DAO berisi fungsi untuk insert, update, delete, dan query daftar siswa. Query getAllSiswa() mengembalikan Flow agar UI menerima perubahan data secara real-time.
3.5 Langkah 5: Membuat Database Class (AppDatabase.kt)
AppDatabase adalah singleton Room Database yang menyediakan akses ke SiswaDao. Database ini menggunakan nama siswa_database.
3.6 Langkah 6: Membuat ViewModel (StudentViewModel.kt)
ViewModel menampung state daftar siswa dan menyediakan fungsi tambahSiswa, editSiswa, dan hapusSiswa. Semua operasi dilakukan di dalam viewModelScope.
3.7 Langkah 7: Membuat UI Compose
UI dibangun melalui tiga komponen utama: FormInput untuk input data, StudentItem untuk tampilan kartu siswa, dan MainScreen sebagai layar utama yang menyusun semua komponen.
3.8 Langkah 8: Setup MainActivity
MainActivity.kt menginisialisasi database dan DAO, membuat ViewModel dengan factory, lalu menampilkan MainScreen dalam tema Pertemuan13Theme.
4. Penjelasan File, Isi Kode, dan Tujuan Masing-Masing
4.1 Tabel Ringkasan File-File Utama
| Kategori | File | Tujuan | Isi Kode Utama |
|---|---|---|---|
| Entry Point | MainActivity.kt |
Activity utama aplikasi | Inisialisasi database dan ViewModel, render MainScreen. |
AndroidManifest.xml |
Konfigurasi manifest aplikasi | Menetapkan MainActivity sebagai launcher. | |
| UI/View Layer | ui/MainScreen.kt |
Layar utama aplikasi | Form input, daftar siswa, dialog konfirmasi hapus. |
ui/FormInput.kt |
Form input data siswa | TextField nama dan email, tombol tambah atau simpan. | |
ui/StudentItem.kt |
Kartu tampilan siswa | Avatar inisial, nama, email, tombol edit dan hapus. | |
| ViewModel Layer | viewmodel/StudentViewModel.kt |
Logika bisnis dan state management | StateFlow list siswa, fungsi tambah, edit, hapus. |
| Data Layer | data/Siswa.kt |
Entity tabel siswa | @Entity dengan id, nama, email. |
data/SiswaDao.kt |
DAO untuk operasi database | @Insert, @Update, @Delete, dan query Flow. | |
data/AppDatabase.kt |
Konfigurasi Room Database | Singleton database dengan siswaDao(). |
|
| Theme & Resources | ui/theme/Color.kt |
Definisi warna aplikasi | Warna dasar Material Theme 3. |
ui/theme/Theme.kt |
Konfigurasi tema | MaterialTheme dengan dukungan dynamic color. | |
ui/theme/Type.kt |
Typography aplikasi | Pengaturan font dasar. | |
| Config & Build | app/build.gradle.kts |
Konfigurasi build dan dependency | Room, ViewModel Compose, Coroutines, Compose UI. |
res/values/strings.xml |
Resource string aplikasi | Nama aplikasi dan string dasar. |
5. Penjelasan Detail Setiap Bagian Kode MainActivity.kt
5.1 Struktur Umum MainActivity
MainActivity berfungsi sebagai entry point aplikasi. Di sini dilakukan inisialisasi database, pembuatan ViewModel, serta rendering UI Compose dengan tema aplikasi.
5.2 Bagian 1: Package dan Import
package com.example.pertemuan13
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import com.example.pertemuan13.data.AppDatabase
import com.example.pertemuan13.ui.MainScreen
import com.example.pertemuan13.ui.theme.Pertemuan13Theme
import com.example.pertemuan13.viewmodel.StudentViewModel
Import berisi komponen Activity modern, Compose, database, UI screen, tema, serta ViewModel.
5.3 Bagian 2: Class Declaration dan onCreate()
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainActivity mewarisi ComponentActivity agar kompatibel dengan Compose. Method onCreate digunakan sebagai titik awal lifecycle Activity.
5.4 Bagian 3: Inisialisasi Database dan DAO
val dao = AppDatabase.getDatabase(applicationContext).siswaDao()
Database Room dibuat melalui singleton AppDatabase, lalu diambil DAO untuk mengakses tabel siswa.
5.5 Bagian 4: ViewModel Factory
val factory = StudentViewModel.factory(dao)
val viewModel: StudentViewModel by viewModels { factory }
ViewModel membutuhkan parameter DAO, sehingga digunakan factory agar ViewModel dapat dibuat dengan dependency yang benar.
5.6 Bagian 5: SetContent dan Render UI
enableEdgeToEdge()
setContent {
Pertemuan13Theme {
MainScreen(viewModel = viewModel)
}
}
UI Compose dirender dengan tema aplikasi, lalu MainScreen ditampilkan sebagai layar utama.
6. Tree Struktur Folder Aplikasi dan Alur Lalu Lintas Data
6.1 Struktur Folder Aplikasi
Pertemuan 13/
├── app/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/com/example/pertemuan13/
│ │ ├── MainActivity.kt
│ │ ├── data/
│ │ │ ├── AppDatabase.kt
│ │ │ ├── Siswa.kt
│ │ │ └── SiswaDao.kt
│ │ ├── viewmodel/
│ │ │ └── StudentViewModel.kt
│ │ └── ui/
│ │ ├── FormInput.kt
│ │ ├── MainScreen.kt
│ │ ├── StudentItem.kt
│ │ └── theme/
│ │ ├── Color.kt
│ │ ├── Theme.kt
│ │ └── Type.kt
│ └── res/
│ ├── values/
│ │ ├── strings.xml
│ │ └── themes.xml
│ ├── mipmap-*/
│ │ └── ic_launcher.webp
│ └── xml/
│ ├── backup_rules.xml
│ └── data_extraction_rules.xml
├── build.gradle.kts (root)
├── settings.gradle.kts
└── gradle/
6.2 Penjelasan Struktur Folder
| Folder/File | Kegunaan | Penjelasan |
|---|---|---|
data/ |
Layer data | Menampung Entity, DAO, dan konfigurasi Room Database. |
viewmodel/ |
Layer ViewModel | Mengelola state dan logika bisnis aplikasi. |
ui/ |
Layer UI | Composable untuk form input, daftar siswa, dan item siswa. |
ui/theme/ |
Styling dan tema | Konfigurasi warna, tema, dan typography aplikasi. |
res/values/ |
Resource dasar | Strings dan tema XML untuk kebutuhan Android. |
6.3 Alur Lalu Lintas Data (Data Flow)
Data mengalir secara terstruktur mulai dari input user sampai ditampilkan kembali dalam daftar siswa:
User Input (View): User mengisi nama dan email pada form.
Event ke ViewModel: MainScreen memanggil fungsi tambah atau edit.
ViewModel Processing: ViewModel menjalankan operasi DAO di coroutine.
DAO Query: DAO mengubah data di Room Database.
Room Result: Data terbaru di-emit sebagai Flow.
State Update: StateFlow diperbarui dan UI recomposition otomatis.
7. Cara Pengujian di Android Studio
7.1 Persiapan Sebelum Testing
Buka Project: Buka folder Pertemuan 13 di Android Studio dan tunggu indexing selesai.
Gradle Sync: Pastikan semua dependency ter-download dengan benar.
Check Build: Pastikan tidak ada error di Build Console.
7.2 Langkah-Langkah Testing
Clean & Build: Jalankan Build > Clean Project, lalu Build > Rebuild Project.
Jalankan Emulator/Device: Siapkan emulator atau device fisik.
Run App: Tekan tombol Run dan pilih device target.
7.3 Scenario Testing
| No | Skenario | Input | Aksi | Expected Result |
|---|---|---|---|---|
| 1 | Tambah Siswa | Nama dan email valid | Isi form lalu klik Tambah Siswa | Data tersimpan dan tampil di daftar siswa. |
| 2 | Edit Siswa | Nama/email baru | Klik tombol Edit, ubah data, simpan | Data siswa berubah sesuai input. |
| 3 | Hapus Siswa | - | Klik Hapus lalu konfirmasi | Data siswa terhapus dari daftar. |
| 4 | Validasi Input | Nama/email kosong atau email tanpa "@" | Klik Tambah Siswa | Data tidak disimpan. |
8. Hasil Pengujian dan Area Placeholder untuk Screenshot
Berikut ringkasan hasil observasi dari beberapa kondisi uji utama.
| Kondisi Uji | Hasil Observasi | Screenshot Hasil |
|---|---|---|
| Kondisi 1: Dashboard Kosong |
|
|
| Kondisi 2: Data Bertambah |
|
|
| Kondisi 3: Edit Data |
|
|
| Kondisi 4: Konfirmasi Hapus |
|
9. Kesimpulan
Project Registrasi Siswa pada Pertemuan 13 berhasil mengimplementasikan proses CRUD yang lengkap dengan Room Database, sekaligus menerapkan arsitektur MVVM agar kode lebih rapi dan mudah dikembangkan. Integrasi Flow dan StateFlow membuat data tampil secara reaktif tanpa refresh manual, sedangkan Compose mempermudah pembuatan UI yang modern dan konsisten.
Dari project ini, saya memperoleh pemahaman yang lebih baik tentang manajemen data lokal, validasi input sederhana, serta workflow pengembangan Android yang profesional. Aplikasi ini dapat menjadi dasar untuk pengembangan fitur lanjutan seperti pencarian, filtering, atau sinkronisasi dengan backend.




Komentar
Posting Komentar