Mengambil data dari tabel database dalam Android Kotlin
Merubah file UserDao
Bukalah file UserDao.kt lalu masukan kode berikut ini:
@Query(“SELECT * FROM user”)
suspend fun ambilSemua():List<User>
Keterangan:
suspend digunakan agar fungsi ini dijalankan secara asynkronous dan tidak memblokir view
Fungsi suspend ini harus dipanggil dalam coroutin
List<User> digunakan karena query ini akan menghasilkan lebih dari satu baris (satu baris itu adalah satu objek User)
Membuat ViewModel
Buatlah folder viewmodel lalu buatlah file viewModelTampilData.kt lalu masukkan kode berikut ini:
class viewModelTampilData(application: Application): AndroidViewModel(application) {
val db = Room.databaseBuilder(application.applicationContext, AppDatabase::class.java, “db_coba”).build()
val userDao = db.userDao()
}
Keterangan:
View model digunakan sebagai tempat data bagi view
val db = Room.databaseBuilder(application.applicationContext, AppDatabase::class.java, “db_coba”).build(), kode ini digunakan untuk membuat objek db yang mempunyai akses ke database db_coba
db.userDao(), kode ini digunakan untuk memanggil metode userDao() milik objek db
Metode onViewCreated
Bukalah file SecondFragment.kt lalu buatlah metode onViewCreated lalu masukkan kode berikut ini:
val tekview:TextView = view.findViewById<TextView>(R.id.txtTampil);
lifecycleScope.launch {
var dataUser = vm.userDao.ambilSemua()
val teks = dataUser.joinToString(separator = “\n”) { user ->
“Nama : ${user.nama}, Hobi: ${user.hobi}”
}
tekview.setText(teks)
}
Keterangan:
Metode onViewCreated digunakan jika kita ingin memberikan data ke view
lifecycleScope adalah sebuah coroutin yang digunakan saat activity atau fragment sedang aktif, digunakan karena saya akan menjalankan fungsi suspend didalamnya yaitu vm.userDao.ambilSemua(), coroutin ini juga untuk mencegah terjadinya blokir terhadap view
dataUser.joinToString(separator = “\n”) , kode ini berarti saya menyatukan elemen dari objek dataUser menjadi sebuah string yang dipisahkan dengan garis baru