Coming from iOS, I’m used to having access to UserDefaults anywhere in my code for storing user settings and such. Android requires a context to access SharedPreferences – pain.
SharedPreferences from anywhere in your App
So I created a Constants class that takes a context, creates a singleton and then allows for various set/get accessors for storing values.
public class Constants { static Constants _instance; Context context; SharedPreferences sharedPref; SharedPreferences.Editor sharedPrefEditor; public static Constants instance(Context context) { if (_instance == null) { _instance = new Constants(); _instance.configSessionUtils(context); } return _instance; } public static Constants instance() { return _instance; } public void configSessionUtils(Context context) { this.context = context; sharedPref = context.getSharedPreferences("AppPreferences", Activity.MODE_PRIVATE); sharedPrefEditor = sharedPref.edit(); } public void storeValueString(String key, String value) { sharedPrefEditor.putString(key, value); sharedPrefEditor.commit(); } public String fetchValueString(String key) { return sharedPref.getString(key, null); } }
NOTE: This just has functions for storing/fetching String values. Storing other values is an exercise left up to the reader (and hopefully the ‘commenter’). 🙂
In your onCreate from your main Activity, simple add this line:
Constants.instance(this.getApplicationContext());
Now anywhere in your code, you can store a String to SharedPreferences like this:
Constants.instance().storeValueString("companyKey", "Brainwash Inc.");
And fetch a value like so:
String companyName = (Constants.instance().fetchValueString("companyKey"));
You can write methods for float, bool, int, long and strings set (and share them).