Rx Preferences 简单整理

20 篇文章 0 订阅
4 篇文章 0 订阅

Rx Preferences


如何使用呢?


创建:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
RxSharedPreferences rxPreferences = RxSharedPreferences.create(preferences);
如此则生成一个RxSharedPreferences,为后续使用提供实例。


读取:
Preference<String> username = rxPreferences.getString("username");
Preference<Boolean> showWhatsNew = rxPreferences.getBoolean("show-whats-new", true);
上面是两个读取值。


检测数据改变:
username.asObservable().subscribe(new Action1<String>() {
  @Override public void call(String username) {
    Log.d(TAG, "Username: " + username);  读取到当前值
  }
}
直接存储:
RxCompoundButton.checks(showWhatsNewView)
    .subscribe(showWhatsNew.asAction());


这里是检测showWhatsNewView是否勾选,自动关联了保存。




下来我们来说说实现原理:




1创建


  private xmPreferences(final SharedPreferences preferences) {
    this.preferences = preferences; //关联住创建的配置
   (1) this.keyChanges = Observable.create(new Observable.OnSubscribe<String>() {
      @Override public void call(final Subscriber<? super String> subscriber) {
        final OnSharedPreferenceChangeListener listener = new OnSharedPreferenceChangeListener() {
          @Override
          public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
            subscriber.onNext(key);  发送改变給监听着
          }
        };


        preferences.registerOnSharedPreferenceChangeListener(listener);  监听配置改变




        配置一个自动解耦的动作,这样在撤掉subscriber时,自动取消注册。
        subscriber.add(Subscriptions.create(new Action0() {
          @Override public void call() {
            preferences.unregisterOnSharedPreferenceChangeListener(listener);
          }
        }));
      }
    }).share();
  }
2 获取
Preference<String> username = rxPreferences.getString("username");
username.get() 可以获得值。


这里关联(1)里面的keyChanges,然后进行操作,过滤和自己的key一致的,然后再做一次map得到值,让你去检测


接口为:asObservable()


 this.values = keyChanges
        .filter(new Func1<String, Boolean>() {
          @Override public Boolean call(String changedKey) {
            return key.equals(changedKey);
          }
        })
        .startWith("<init>") // Dummy value to trigger initial load.
        .onBackpressureLatest()
        .map(new Func1<String, T>() {
          @Override public T call(String ignored) {
            return get();
          }
        });


3:检测改变
自动检测属性改变,进行我们的 操作


username.asObservable().subscribe(new Action1<String>() {
  @Override public void call(String username) {
    Log.d(TAG, "Username: " + username); 
  }
}
4
 这里用了Rxbing的接口


RxCompoundButton.checks(showWhatsNewView)
    .subscribe(showWhatsNew.asAction());
showWhatsNew.asAction() 具体代码为:


这样子自动检测出来结果后,操作了set动作,存储值。
  @CheckResult @NonNull
  public Action1<? super T> asAction() {
    return new Action1<T>() {
      @Override public void call(T value) {
        set(value);
      }
    };
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员入门进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值