Apa itu SharedPreferences?, SharedPreferences adalah sebuah class yang memiliki kemampuan ataupun fungsi untuk menampung data dalam key/value yang berpasangan. Data dalam SharedPreferences nantinya dapat digunakan dalam aktivitas apa saja dalam android studio. Key or Value pair digunakan untuk melihat suatu informasi. Untuk menggunakan SharedPreferences dalam Android Jetpack Compose dengan arsitektur MVVM, Anda bisa mengikuti langkah-langkah berikut:
Buat project baru menggunakan android studio. pilih project untuk jetpack compose.
Pertama yang kita buat adalah file repository. beri nama PreferencesRepository.kt. file ini akan bertugas untuk mengola data. isi file sebagai berikut :
class PreferencesRepository(private val sharedPreferences: SharedPreferences) {
companion object {
private const val KEY_USERNAME = "key_username"
}
fun saveUsername(username: String) {
sharedPreferences.edit().putString(KEY_USERNAME, username).apply()
}
fun getUsername(): String? {
return sharedPreferences.getString(KEY_USERNAME, null)
}
}
Buat viewModel dengan nama PreferencesViewModel.kt. file ini akan menjadi penghubung antara Repository dan UI.
class PreferencesViewModel(private val repository: PreferencesRepository) : ViewModel() {
private val _username = mutableStateOf("")
val username: State<String> get() = _username
fun saveUsername(username: String) {
repository.saveUsername(username)
_username.value = username
}
fun loadUsername() {
_username.value = repository.getUsername() ?: ""
}
}
Sekarang kita akan membuat tampilan untuk menyimpan data ke sharePreferend. Buat composable baru pada MainActivity.kt. dengan mengetikkan seperti dibawah ini:
@Composable
fun PreferencesScreen() {
val sharedPreferences = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE)
val repository = PreferencesRepository(sharedPreferences)
val viewModel = PreferencesViewModel(repository)
val username by viewModel.username
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
TextField(
value = username,
onValueChange = { viewModel.saveUsername(it) },
label = { Text("Username") }
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { viewModel.loadUsername() }) {
Text("Load Username")
}
}
}
Hasil UI diatas terdiri dari textfield dan button. dimana pada saat textfield ada perubahan makan nilai yang dimasukan akan tersimpan pada sharepreferend. dan ketika tombol load username ditekan effeknya akan menampilkan isi dari data yang tersimpan didalam sharepreferend
Selamat mencoba, Terimah kasih :-)