博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rxjava(一)初试
阅读量:6606 次
发布时间:2019-06-24

本文共 3313 字,大约阅读时间需要 11 分钟。

根据 该地址的内容,学习了一些关于Rxjava的基本用法,并非整篇文章都能看懂,这里做些总结。

一、这里记录一些关键性的词

1、Observer观察者,Observable被观察者
2、subscribe订阅,subscribe()订阅的方法
3、onNext()回调,相当于onClick()
4、onCompleted(),队列事件完结
5、onError(),事件队列异常,5和6一般都会在事件队列结尾出现,而且只有一个。
6、Subscriber,也就相当Observer的扩展
7、OnSubscribe,计划表

二、最基本的用法

1、创建Observer

Observer
observer = new Observer
() { @Override public void onNext(String s) { Log.d(tag, "Item: " + s); }@Overridepublic void onCompleted() { Log.d(tag, "Completed!");}@Overridepublic void onError(Throwable e) { Log.d(tag, "Error!");}};

2、创建Observable

Observable observable = Observable.create(new Observable.OnSubscribe
() {@Overridepublic void call(Subscriber
subscriber) { subscriber.onNext("Hello"); subscriber.onNext("Hi"); subscriber.onNext("Aloha"); subscriber.onCompleted();}});

Rxjava使用create方法来创建一个Observable

这里文章中有一句话是这样说当Observable被订阅时,Onsubscribe的call方法会自动被调用
那么这里就有一个小问题了,Observable什么时候被订阅

除了用create方法创建Observable之外,还可以用just和from

Observable observable = Observable.just("Hello", "Hi", "Aloha");String[] words = {"Hello", "Hi", "Aloha"};Observable observable = Observable.from(words);

3、Subscribe()方法

用subscribe可以将Observable和Observer链接起来

observable.subscribe(observer);

那么什么叫链接起来,是普通观察者模式中Observer订阅Observable时将Observer加入Observable中的ObserverList的意思吗?

文章中有直接给出这个方法的核心代码,我觉得作者在这里非常的牛逼,他把一些优化的东西去除,只留下了最简单的核心实现代码给初学者看,那样简直就是十分的直观

public Subscription subscribe(Subscriber subscriber) {    subscriber.onStart();    onSubscribe.call(subscriber);    return subscriber;}

可以看出onStart方法相当于准备操作,而这个方法中调用了call方法。是不是就可以说Observable并不是在创建时就立即发送事件,而是在它被订阅的时候。是不是也就是说,当你调用这个方法时,会马上实现回调。

这里有一张图也是画得很好:

img_b2833458efa340536d931a85b0e0e39f.png
Paste_Image.png

这个条目中还说了一个这个方法可以支持不完整的回调,我看了一下,看不太懂是什么意思,再后面弄清楚之后再补上。

4、例子

先取其中一个简单的例子来进行分析吧(由Id取得图片并显示)

int drawableRes = ...;ImageView imageView = ...;Observable.create(new OnSubscribe
() { @Override public void call(Subscriber
subscriber) { Drawable drawable = getTheme().getDrawable(drawableRes)); subscriber.onNext(drawable); subscriber.onCompleted(); }}).subscribe(new Observer
() { @Override public void onNext(Drawable drawable) { imageView.setImageDrawable(drawable); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { Toast.makeText(activity, "Error!", Toast.LENGTH_SHORT).show(); }});

例子虽然简单,但是他把所有的内容都混在一起写了,那我就在这里分开写更明了一些,也方便以后的更深内容。

首先创建Observer

Observer
observer = new Observer
(){ @Override public void onNext(Drawable drawable) { imageView.setImageDrawable(drawable); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { Toast.makeText(activity, "Error!",Toast.LENGTH_SHORT).show(); }}

然后创建Observable

Observable observable = Observable.create(new OnSubscribe
() { @Override public void call(Subscriber
subscriber) { Drawable drawable = getTheme().getDrawable(drawableRes)); subscriber.onNext(drawable); subscriber.onCompleted(); }})

最后订阅

observable.subscribe(observer)。然后就执行了call中的方法

这里就是把Drawable类型传过去,所以这两个类的泛型都是使用了相同的类型。而OnSubscribe的泛型的意思像是“传递的给观察者的参数的类型”。Observer的泛型表示接收参数的类型。

剩下的博客内容会在其它地方将,这篇只是讲基础。

转载地址:http://pjbso.baihongyu.com/

你可能感兴趣的文章
建立第一个Sencha Touch应用
查看>>
Yarn的ApplicationMaster管理
查看>>
javascript 和 jquery插件开发
查看>>
数论 - 欧拉函数模板题 --- poj 2407 : Relatives
查看>>
angular学习笔记(三十)-指令(7)-compile和link(1)
查看>>
Linux Shell文件差集
查看>>
双网卡绑定-bond0
查看>>
JStack分析cpu消耗过高问题
查看>>
[solr] - IKAnalyzer 扩展分词库
查看>>
Mining 影响数据挖掘结果的 5 方面
查看>>
shell脚本执行时报"bad interpreter: Text file busy"的解决方法
查看>>
MVC4 WebAPI
查看>>
同步两台linux服务器时间同步方案
查看>>
RMSE均方根误差学习笔记
查看>>
Rhythmbox乱码的解决的方法
查看>>
应用程序框架实战十:开发环境准备与学习资料清单
查看>>
iOS中拉伸图片的几种方式
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
Creating Dynamic LOV in Oracle D2k Forms
查看>>
Mysql 数据库字符类型详解
查看>>