Rx Preferences 简单整理
发布日期:2021-06-29 15:25:22
浏览次数:3
分类:技术文章
本文共 2418 字,大约阅读时间需要 8 分钟。
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); } }; }
转载地址:https://codegg.blog.csdn.net/article/details/51345235 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月17日 05时11分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
基于SSM框架的超市管理系统
2019-04-29
基于java的SSM框架理财管理系统的设计与实现
2019-04-29
基于java的图书管理系统的设计与实现
2019-04-29
基于SSM的兼职论坛系统的设计与实现
2019-04-29
基于SSM的酒店管理系统的设计与实现
2019-04-29
基于ssm的汽车租赁系统的设计与实现
2019-04-29
基于ssm框架的名宿网站的设计与实现
2019-04-29
基于java的来访咨询系统的设计与实现
2019-04-29
基于java的医院分诊系统的设计与实现
2019-04-29
基于java的疫情数据查看系统与实现
2019-04-29
基于java的音乐网站的设计与实现
2019-04-29
基于java的在线选房的设计与实现
2019-04-29
基于java的左面聊天室系统的设计与实现
2019-04-29
基于ssh的学生成绩管理系统的设计与实现
2019-04-29
基于ssh的学生宿舍管理系统
2019-04-29
基于ssm的在线招标系统的设计与实现
2019-04-29
基于vue框架的在线问卷的设计
2019-04-29
java的酒店房间管理系统
2019-04-29
基于Java的截图工具
2019-04-29
基于JAVA的停车场管理系统
2019-04-29