-
Notifications
You must be signed in to change notification settings - Fork 0
SharedPreferencesHelpers
Since AndroidAnnotations 2.1
SharedPreferences helpers allow you to use Android SharedPreferences, but in a typesafe manner, instead of using strings.
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 namedMyActivity_MyPrefs; -
ACTIVITY_DEFAULT, for a shared preference namedMyActivity(also available throughactivity.getPreferences()); -
APPLICATION_DEFAULT, for the defaultSharedPreferenceorUNIQUE, for a shared preference namedMyPrefs.
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 {
...Please note that shared prefs can only be used in activities, due to some compiler specific hairy bugs. If you really think you'd need to use them in another kind of component, please let us know by raising an issue.
If you need more details, Old Issue 47 should give you enough information to get started.
You could also have a look at the functional tests.
03/30/2012 The 2.5.1 release is out
- Get started!
- Cookbook, full of recipes
- Examples
- Read the FAQ
- Join the Mailing list
- Create an issue