Awesome
ProxyPref
ProxyPref is a simple Android library, which allows to easily access SharedPreferences.
Definition
Define an interface with set/get method for types:
String
, Integer
, Long
, Float
, Boolean
, Set<String>
Keys are method names from the interface, but without set
/get
prefixes.
You can omit set
/get
part if you like.
Annotate fields with Preference
annotation to set a preference key name if you're going to use ProGuard.
RxJava
There is also rx.Observable
and rx.functions.Action1
interface support to chain
preferences into RxJava operators.
null
null
is does not exist value. If you don't want to get nulls - define default values with
DefaultString
, DefaultInteger
, DefaultLong
, DefaultFloat
, DefaultBoolean
, DefaultSet
.
You can also remove a key-value pair from preferences by passing null
into the set method.
interface MyPreferences {
// access with get/set prefix
String getTestString(); // key = testString
void setTestString(String x); // key = testString
// without get/set prefix
Integer testInteger(); // key = testInteger
void testInteger(Integer x); // key = testInteger
// observe with rx.Observable
Observable<Integer> lastSelectedItem(); // key = lastSelectedItem
// set with rx.functions.Action1
Action1<Integer> setLastSelectedItem(); // key = lastSelectedItem
// ProGuard ready
@Preference("username")
String a12(); // key = username
// Default value
@DefaultString("user256")
String username(); // key = username
// Default set
@DefaultSet({"1", "2", "3"})
Set<String> getSomeSet(); // key = someSet
}
Usage
Is easy!
MyPreferences pref = ProxyPreferences
.build(MyPreferences.class, getSharedPreferences("preferences", 0));
Log.v("test", pref.username());
OR
MyPreferences pref = ProxyPreferences
.buildWithRx(MyPreferences.class, getSharedPreferences("preferences", 0));
If you want to have RxJava features. Don't forget to include RxJava itself. ;)
RxJava warning
Keep hard references to RxJava subscriptions otherwise they can be GC'ed due to the SharedPreferences
bug.
Dependency
compile 'info.android15.proxypref:proxypref:0.2.0'