Skip to content

SharedPreferencesHelpers

pyricau edited this page Nov 22, 2012 · 9 revisions

Since AndroidAnnotations 2.1

SharedPreferences helpers allow you to use Android SharedPreferences, but in a typesafe manner, instead of using strings.

Defining the preferences

First, you should create an interface annotated with @SharedPref to define the SharedPreferences :

@SharedPref
public interface MyPrefs {

        // The field name will have default value "John"
	@DefaultString("John")
	String name();

        // The field age will have default value 42
	@DefaultInt(42)
	int age();

        // The field lastUpdated will have default value 0
	long lastUpdated();

}

Based on that specification, AndroidAnnotations builds a SharedPreferences Helper that has the same name plus an underscore. You can get an instance of the generated helper in an activity with the @Pref annotation.

@EActivity
public class MyActivity extends Activity {

	@Pref
	MyPrefs_ myPrefs;
	
	// ...

}

You can then start using it:

// Simple edit
myPrefs.name().put("John");

// Batch edit
myPrefs.edit()
  .name()
  .put("John")
  .age()
  .put(42)
  .apply();

// Preference clearing:
myPrefs.clear();

// Check if a value exists:
boolean nameExists = myPrefs.name().exists();

// Reading a value
long lastUpdated = myPrefs.lastUpdated().get();

// Reading a value and providing a fallback default value
long now = System.currentTimeMillis();
long lastUpdated = myPrefs.lastUpdated().getOr(now);

Observe that you can name the shared preference by setting value to one of the following:

  • ACTIVITY, for a shared preference named MyActivity_MyPrefs;
  • ACTIVITY_DEFAULT, for a shared preference named MyActivity (also available through activity.getPreferences());
  • APPLICATION_DEFAULT, for the default SharedPreference or UNIQUE, for a shared preference named MyPrefs.

Therefore, if a single shared preference is needed for the interface defined, in order to all activities of a given application to share the same preferences, the following should be used:

@SharedPref(value=Scope.UNIQUE)
public interface MyPrefs {
...

Using AndroidAnnotations

Questions?

Enjoying AndroidAnnotations

Improving AndroidAnnotations

Clone this wiki locally