RxJava使用场景小结

原创 2015年11月30日 23:16:33

取数据先检查缓存的场景

取数据,首先检查内存是否有缓存
然后检查文件缓存中是否有
最后才从网络中取
前面任何一个条件满足,就不会执行后面的

final Observable<String> memory = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        if (memoryCache != null) {
            subscriber.onNext(memoryCache);
        } else {
            subscriber.onCompleted();
        }
    }
});
Observable<String> disk = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        String cachePref = rxPreferences.getString("cache").get();
        if (!TextUtils.isEmpty(cachePref)) {
            subscriber.onNext(cachePref);
        } else {
            subscriber.onCompleted();
        }
    }
});

Observable<String> network = Observable.just("network");

//主要就是靠concat operator来实现
Observable.concat(memory, disk, network)
.first()
.subscribeOn(Schedulers.newThread())
.subscribe(s -> {
    memoryCache = "memory";
    System.out.println("--------------subscribe: " + s);
});

界面需要等到多个接口并发取完数据,再更新

//拼接两个Observable的输出,不保证顺序,按照事件产生的顺序发送给订阅者
private void testMerge() {
    Observable<String> observable1 = DemoUtils.createObservable1().subscribeOn(Schedulers.newThread());
    Observable<String> observable2 = DemoUtils.createObservable2().subscribeOn(Schedulers.newThread());

    Observable.merge(observable1, observable2)
            .subscribeOn(Schedulers.newThread())
            .subscribe(System.out::println);
}

一个接口的请求依赖另一个API请求返回的数据

举个例子,我们经常在需要登陆之后,根据拿到的token去获取消息列表。

这里用RxJava主要解决嵌套回调的问题,有一个专有名词叫Callback hell

NetworkService.getToken("username", "password")
    .flatMap(s -> NetworkService.getMessage(s))
    .subscribe(s -> {
        System.out.println("message: " + s);
    });

界面按钮需要防止连续点击的情况

RxView.clicks(findViewById(R.id.btn_throttle))
    .throttleFirst(1, TimeUnit.SECONDS)
    .subscribe(aVoid -> {
        System.out.println("click");
    });

响应式的界面

比如勾选了某个checkbox,自动更新对应的preference

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
RxSharedPreferences rxPreferences = RxSharedPreferences.create(preferences);

Preference<Boolean> checked = rxPreferences.getBoolean("checked", true);

CheckBox checkBox = (CheckBox) findViewById(R.id.cb_test);
RxCompoundButton.checkedChanges(checkBox)
        .subscribe(checked.asAction());

复杂的数据变换

Observable.just("1", "2", "2", "3", "4", "5")
    .map(Integer::parseInt)
    .filter(s -> s > 1)
    .distinct()
    .take(3)
    .reduce((integer, integer2) -> integer.intValue() + integer2.intValue())
    .subscribe(System.out::println);//9
版权声明:本文为博主原创文章,未经博主允许不得转载。

开源一个瀑布流展示图文信息的小应用

瀑布流展示图文信息的小应用。其他功能包括:应用换肤,仿今日头条查看图片详情样式,聊天机器人等。本项目主要是用来练习主流开源项目的使用,图片数据属原创公司所有,此处仅作为学习使用。   特点: 1.j...

DynamicAPK基本概念

从这篇blog开始,我准备写一个关于Android动态加载的博客,主要Android插件开发的原理,前面几篇主要以携程开源的DynamicAPK 的源码作为基础来进行分析,后面可能会对该库进行一些改...
  • lzyzsd
  • lzyzsd
  • 2015年12月06日 23:39
  • 7392

RxJava在Android中使用场景详解

在Android开发中的一些真实场景如何使用RxJava

RxJava中BehaviorSubject适合的使用场景

上篇大体介绍了RxJava中几种常见的Subject特性 下面我们着重阐述BehaviorSubject适合的使用场景 场景1:A页面正在请求数据立马跳到B页面,B页面希望能够接受到A页面发起请求...
  • dbs1215
  • dbs1215
  • 2016年09月11日 12:23
  • 2566

Android RxJava使用场景小结

取数据先检查缓存的场景取数据,首先检查内存是否有缓存 然后检查文件缓存中是否有 最后才从网络中取 前面任何一个条件满足,就不会执行后面的final Observable memory = ...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月21日 23:34
  • 3428

RxJava使用场景整理

Rxjava是什么(异步库、响应式编程)基于自己的理解简单的下一个定义: RxJava是一个使用Java语言实现基于观察者模式拓展而来的高效异步库。1.缓存的逻辑处理取数据时先检查是否有内存缓存,然后...

RxJava使用场景小结

取数据先检查缓存的场景 取数据,首先检查内存是否有缓存  然后检查文件缓存中是否有  最后才从网络中取  前面任何一个条件满足,就不会执行后面的final Observable memor...

RxJava适合在哪些场景使用呢?

取数据先检查缓存的场景 取数据,首先检查内存是否有缓存  然后检查文件缓存中是否有  最后才从网络中取  前面任何一个条件满足,就不会执行后面的 final Observable mem...

RxJava---使用场景

使用场景

RxJava(九)zip操作符在Android中的实际使用场景

zip操作符概述官方文档描述:Returns an Observable that emits the results of a specified combiner function applied...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RxJava使用场景小结
举报原因:
原因补充:

(最多只允许输入30个字)