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).

