I have an app where I'm using SharedPreferences. When I try to get the saved name this error occurs: java.lang.RuntimeException: Cannot create an instance of class com.meetme.viewmodel.SharedPrefViewModel
What could be wrong in code below? Any ideas?
SharedPrefViewModel class:
class SharedPrefViewModel(context: Context): ViewModel() {
private var sharedPrefRepository: SharedPrefRepository = SharedPrefRepository(context.applicationContext)
fun putString(name: String) {
sharedPrefRepository.putString(name)
}
fun getString() : String? {
return sharedPrefRepository.getString() <-- here is the error
}
}
SharedPrefRepository class:
class SharedPrefRepository(context: Context) {
private val pref: SharedPreferences =
context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE)
var name: String?
get() = pref.getString(PREF_LOGGED_IN, "")
set(value) = pref.edit().putString(PREF_LOGGED_IN, value).apply()
fun putString(name: String) {
this.name = name
}
fun getString() : String? {
return this.name
}
}
Composable, where I'm using prefs to save a name:
@Composable
fun BasicInfoScreen(navController: NavHostController) {
var context = LocalContext.current.applicationContext
val sharedPrefViewModel = SharedPrefViewModel(context)
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.padding(16.dp)
) {
...
Button(
onClick = {
sharedPrefViewModel.putString("default") <---- here
navController.navigate(RootGraphItem.Location.route)
},
modifier = Modifier
.fillMaxWidth()
.height(50.dp)
.background(Color(0xFF0090FF)),
colors = ButtonDefaults.buttonColors(backgroundColor = Color(0xFF0090FF))
) {
Text(text = "Next", style = TextStyle(color = Color.White))
}
}
}
Composable that gets a value from prefs:
@Composable
fun LocationScreen(navController: NavHostController) {
val sharedPrefViewModel: SharedPrefViewModel = viewModel()
println(sharedPrefViewModel.getString()) <-- get name
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.padding(16.dp)
) {
...
}
}