深入浅出RxJava—基础篇
来源:互联网 发布:唐宣宗 知乎 编辑:程序博客网 时间:2024/05/15 08:09
原文链接
参考文章
在项目gradle中引入
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
基础
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello RXJava");subscriber.onCompleted();
}});
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
Toast.makeText(MainActivity.this, "完成", Toast.LENGTH_LONG).show();
}@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show(); }};
observable.subscribe(subscriber);
这个是最basic的写法,定义一个发布者和订阅者,通过observable.subscribe(subscriber) 将两者关联起来,observable 将会调用subscriber 的onNext方法和onCompleted方法。
显然为了打印一句"Hello RXJava" 要写这么多繁琐的代码,如何更加简洁的书写逻辑呢? RxJava提供了很多函数供我们使用。
Observable<String> just = Observable.just("你好");
Action1<String> action1 = new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
};
just.subscribe(action1);
如上,Observable.just 函数就是用来创建只发送一个事件就结束的Observable 对象的,subscriber 只关心onNext 方法其他两个方法不关心,所以我们可以使用newAction1 这个类。最后通过just.subscribe(action1)将两者关联起来。以上代码还可以更简写:
Observable.just("你好").subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
});
变换/操作符
如果现在想在"你好" 后面加签名要怎么做呢? 你可能说直接加上,这样 "你好,win" 但是这样真的可以吗? 假如有多个订阅者呢?显然这猴子那个方式不可行。直接这样Toast.makeText(MainActivity.this, s+"win",Toast.LENGTH_LONG).show(); 直接加载订阅者的处理逻辑里,这样的话,是可以的,但是这样写代码是不是很累赘呢?一点都不轻量级。如果能在中间的某个步骤进行变换,岂不是最好。那么操作符应运而生。操作符就是解决Observable 对象变换的问题的。且RxJava提供了很多操作符。
map:就是把一个事件转换为另一个事件,操作符就是用于变换Observable 对象的,它返回一个Observable 对象,这样可以实现链式调用,在一个Observable 上多次使用map操作符,将对简单的数据传递给subscriber 。
Observable.just("你好").map(new Func1<String, String>() { //入参是字符串,出参也是字符串
@Override
public String call(String s) {
return s + "+ win";
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
});
Observable.just("map 练习").map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return s.hashCode();
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer Integer) {
Toast.makeText(MainActivity.this, String.valueOf(Integer), Toast.LENGTH_LONG).show();
}
});
之前我们说了map变换将最简单的数据传递给subscriber ,所以还可以这么写
Observable.just("map 练习").map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return s.hashCode();
}
}).map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return String.valueOf(integer);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
});
总结
1.Observable 和subscriber可以做任何事情
Observable 可以是一个数据库查询,subscriber用来显示查询结果;Observable 可以是屏幕上的点击事件,subscriber用来响应点击事件;Observable 可以是一个网络请求,subscriber用来显示请求结果。
2.Observable 和subscriber是独立于中间的变换过程的。
在Observable 和subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。
阅读全文
0 0
- 深入浅出RxJava—基础篇
- 深入浅出RxJava——基础篇
- 深入浅出RxJava——基础篇
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- 深入浅出RxJava(一:基础篇)
- var 与let const比较
- mybatis怎么返回某列的最大值
- 数据结构-图的应用之最短路径
- matplotlib.patches.Polygon
- short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?【Java面试题】
- 深入浅出RxJava—基础篇
- java中poi模板下载
- http 的缓存策略
- android studio 生成AAR和引用AAR
- 关于函数return 问题 详细解释~
- 以树状结构输出计算机某个指定文件夹下的所有的文件和子文件夹名称
- JavaSE阶段测试
- 自定义Toast
- sscanf的高级用法(总结)