I am developing an Android application using MVVM. I need to access SharedPreferences
in a ViewModel
, but I do not know how to do it.
I know that it is possible to access a context when inheriting AndroidViewModel
, but I want to know if it is possible and how to do it using DI container (Dagger 2).
These preferences will automatically save to SharedPreferences as the user interacts with them. To retrieve an instance of SharedPreferences that the preference hierarchy in this activity will use, call getDefaultSharedPreferences(android. content. Context) with a context in the same package as this activity.
Shared Preferences allow you to save and retrieve data in the form of key,value pair. In order to use shared preferences, you have to call a method getSharedPreferences() that returns a SharedPreference instance pointing to the file that contains the values of preferences.
Android Shared Preferences Overview Android stores Shared Preferences settings as XML file in shared_prefs folder under DATA/data/{application package} directory. The DATA folder can be obtained by calling Environment.
It is possible. As you mentioned your ViewModel
has to extend AndroidViewModel
then call getApplication()
and use it as context when accessing SharedPreferences
.
And for using Dagger 2 in ViewModel
: you cannot directly inject anything in ViewModel
either by parameter or field injection, for that you will need to use ViewModel Factory
and inject objects there first and pass them to whatever ViewModel
you want.
To learn more about using Dagger 2 with ViewModels
refer to this article.
UPDATE (2020-08-06):
It is possible to use Dagger 2 injections in ViewModels
, check Kotlin Clean Architecture library exmaples of how to use it.
https://github.com/android10/Android-CleanArchitecture-Kotlin
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With