rx-preferences
1.1、rx-preferences简介

rx-preferences是对AndroidSharedPreferences的封装。

rx-preferencesGitHub上的网址:https://github.com/f2prateek/rx-preferences

1.2、在build.gradle里面添加依赖
compile 'com.f2prateek.rx.preferences2:rx-preferences:2.0.0-RC2'
1.3、RxSharedPreferences

创建实例:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);

RxSharedPreferences都是一些public Preference<T> getXX(String key)方法。有下面这些方法:

public Preference<Boolean> getBoolean(@NonNull String key)
public Preference<Boolean> getBoolean(@NonNull String key, @NonNull Boolean defaultValue)

public Preference<Float> getFloat(@NonNull String key)
public Preference<Float> getFloat(@NonNull String key, @NonNull Float defaultValue)

public Preference<Integer> getInteger(@NonNull String key)
public Preference<Integer> getInteger(@NonNull String key, @NonNull Integer defaultValue)

public Preference<Long> getLong(@NonNull String key)
public Preference<Long> getLong(@NonNull String key, @NonNull Long defaultValue)

public Preference<String> getString(@NonNull String key)
public Preference<String> getString(@NonNull String key, @NonNull String defaultValue)

public Preference<Set<String>> getStringSet(@NonNull String key)
public Preference<Set<String>> getStringSet(@NonNull String key, @NonNull Set<String> defaultValue)

public <T extends Enum<T>> Preference<T> getEnum(@NonNull String key, @NonNull T defaultValue, @NonNull Class<T> enumClass)

public <T> Preference<T> getObject(@NonNull String key, @Nullable T defaultValue, @NonNull Preference.Converter<T> converter)
1.4、Preference<T>

Preference接口的源码如下:

package com.f2prateek.rx.preferences2;

public interface Preference {

    interface Converter {
        @NonNull T deserialize(@NonNull String serialized);
        @NonNull String serialize(@NonNull T value);
    }

    @NonNull String key();
    @NonNull T defaultValue();
    @NonNull T get();
    void set(@NonNull T value);
    boolean isSet();
    void delete();
    @CheckResult @NonNull Observable asObservable();
    @CheckResult @NonNull Consumer asConsumer();
}
1.4.1、T get()

获得对应key的值。

示例:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);
Preference<Boolean> xxPreference = rxSharedPreferences.getBoolean("xx");
boolean isXX = xxPreference.get();
1.4.2、void set(@NonNull T value)

设置对应key的值。

示例:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);
Preference<Boolean> xxPreference = rxSharedPreferences.getBoolean("xx");
xxPreference.set(true);
1.4.3、boolean isSet()

判断key的是否有值。

1.4.4、void delete()

删除此key对应的值。

1.4.5、String key()

获得key。

1.4.6、Observable<T> asObservable()

转换成一个Observable对象。

示例:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);
Preference xxPreference = rxSharedPreferences.getBoolean("xx");
xxPreference.asObservable().subscribe(new Consumer() {
    @Override
    public void accept(@NonNull Boolean aBoolean) throws Exception {
        //TODO
    }
});
1.4.7、Consumer<? super T> asConsumer()

转换成一个Consumer对象。

示例:

RxCompoundButton.checks(showWhatsNewView).subscribe(showWhatsNew.asAction());

这里RxCompoundButtonRxBinding中的类。