Rxjava响应式编程
一、Rxjava的思维
(1)响应式编程 (根据上一层的响应来影响下一层的变化) Rx全称:reactivex
链式编程:起点-需求1-需求2-......-终点
eg:登录操作: 触发登录按钮(起点)------第一步登录--------第二步登录------第三步登录--------登录跳转至主页面(终点)
中间三步登录即为需求
(2)具体思维代码:
只看起点和终点:obsevrable被观察者为起点、subscribe订阅为关联起点和终点
-
Observable.just(Path)
-
//关联:观察者设计模式 关联起点和终点=订阅
-
.subscribe(new Observer<Bitmap>() {
-
//订阅成功
-
@Override
-
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
-
pg.show("正在加载中"); //终点进程的第一步
-
-
}
-
//上一层给我的响应
-
@Override
-
public void onNext(@io.reactivex.rxjava3.annotations.NonNull Bitmap bitmap) {
-
binding.iv.setImageBitmap(bitmap); //响应后显示图片
-
-
}
-
//链条思维发生异常
-
-
@Override
-
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
-
-
}
-
//整个链条全部结束
-
@Override
-
public void onComplete() {
-
if(pg!=null){
-
pg.dismiss(); //隐藏进度条
-
}
-
-
}
-
});
如果中间添加了三个需求:
-
Observable.just(Path)
-
//需求1:图片下载需求将string转成bitmap
-
.map(new Function<String, Bitmap>() {
-
@Override
-
public Bitmap apply(String path) throws Throwable {
-
try{
-
Thread.sleep(2000);
-
//请求服务器响应数据
-
URL url=new URL(path);
-
HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
-
httpURLConnection.setConnectTimeout(5000); //设置请求最短时间
-
int responseCode=httpURLConnection.getResponseCode(); //得到响应码
-
if(responseCode==HttpURLConnection.HTTP_OK){
-
InputStream inputStream=httpURLConnection.getInputStream();
-
Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
-
return bitmap; //将此时的bitmap传至下一层
-
-
}
-
-
}catch (Exception e){
-
e.printStackTrace();
-
}
-
return null;
-
}
-
})
-
-
//需求2:加水印
-
.map(new Function<Bitmap, Bitmap>() {
-
@Override
-
public Bitmap apply(Bitmap bitmap) throws Throwable {
-
Paint paint=new Paint(); //画布
-
paint.setColor(Color.BLUE);
-
paint.setTextSize(88); // 字的大小
-
Bitmap shuiyingbitmap=drawTextToBitmap(bitmap,"好的",paint,88,88);
-
return shuiyingbitmap; //将此时加水印的bitmap传至下一层
-
}
-
})
-
-
//需求3:日志打印需求
-
.map(new Function<Bitmap, Bitmap>() {
-
@Override
-
public Bitmap apply(Bitmap bitmap) throws Throwable {
-
Log.e("tag","什么时候下载了图片apply" System.currentTimeMillis());
-
return bitmap; //此时的bitmap没有做任何改变
-
}
-
})
-
-
//给上面的线程分配异步线程
-
.subscribeOn(Schedulers.io())
-
-
//终点分配Android主线程
-
.observeOn(AndroidSchedulers.mainThread())
-
-
//关联:观察者设计模式 关联起点和终点=订阅
-
.subscribe(new Observer<Bitmap>() {
-
//订阅成功
-
@Override
-
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
-
pg.show("正在加载中"); //终点进程的第一步
-
-
}
-
//上一层给我的响应
-
@Override
-
public void onNext(@io.reactivex.rxjava3.annotations.NonNull Bitmap bitmap) {
-
binding.iv.setImageBitmap(bitmap); //响应后显示图片
-
-
}
-
//链条思维发生异常
-
-
@Override
-
public void onError(@io.reactivex.rxjava3.annotations.NonNull Throwable e) {
-
-
}
-
//整个链条全部结束
-
@Override
-
public void onComplete() {
-
if(pg!=null){
-
pg.dismiss(); //隐藏进度条
-
}
-
-
}
-
});
二、订阅及主要的操作符
(1)subscribe中observe和custom的区别:
observe中有四个方法:onSubscribe、onNext、 onError、onComplete()
custom中只有一个方法:accept()对应的observe中的onNext()方法
Observable.fromArray(strings) //订阅起点终点 .subscribe(new Consumer<String>() { @Override //终点 public void accept(String s) throws Throwable { Log.d("tag","accept:" s); //打印输出数组 } });
(2)主要的操作符
1.创建操作符 create、just 主要是创建observeable
2.转换操作符 map、flatmap 主要是对发射的事件进行再处理,比如上面的增加需求用map操作符
3.组合操作符:concat、concatArray 主要就是将多个被观察者集合成一个呗观察者
4.功能操作符:subscribeOn():决定产生事件发射的线程、observeOn():决定下游事件被处理时所处的线程
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjfejb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24