Rxjava(一)初试

简介: 根据http://gank.io/post/560e15be2dca930e00da1083#toc_16 该地址的内容,学习了一些关于Rxjava的基本用法,并非整篇文章都能看懂,这里做些总结。

根据http://gank.io/post/560e15be2dca930e00da1083#toc_16 该地址的内容,学习了一些关于Rxjava的基本用法,并非整篇文章都能看懂,这里做些总结。

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

二、最基本的用法
1、创建Observer

Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

@Override
public void onCompleted() {
    Log.d(tag, "Completed!");
}

@Override
public void onError(Throwable e) {
    Log.d(tag, "Error!");
}
};

2、创建Observable

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> 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<Drawable>() {
    @Override
    public void call(Subscriber<? super Drawable> subscriber) {
        Drawable drawable = getTheme().getDrawable(drawableRes));
        subscriber.onNext(drawable);
        subscriber.onCompleted();
    }
}).subscribe(new Observer<Drawable>() {
    @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<Drawable> observer = new Observer<Drawable>(){
    @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<Drawable>() {
    @Override
    public void call(Subscriber<? super Drawable> subscriber) {
        Drawable drawable = getTheme().getDrawable(drawableRes));
        subscriber.onNext(drawable);
        subscriber.onCompleted();
    }
})

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

这里就是把Drawable类型传过去,所以这两个类的泛型都是使用了相同的类型。而OnSubscribe的泛型的意思像是“传递的给观察者的参数的类型”。Observer的泛型表示接收参数的类型。
剩下的博客内容会在其它地方将,这篇只是讲基础。

目录
相关文章
|
Java 编译器 测试技术
枯燥的Kotlin协程三部曲(中)——应用实战篇(中)
上节《枯燥的Kotlin协程三部曲(上)——概念启蒙篇》,追根溯源,先了解并发相关的概念,尔后引出Kotlin协程
231 0
|
6月前
|
存储 缓存 Android开发
Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow 与 SharedFlow(下)
Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow 与 SharedFlow(下)
68 0
|
6月前
|
存储 缓存 人工智能
Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow 与 SharedFlow(上)
Kotlin 学习笔记(六)—— Flow 数据流学习实践指北(二)StateFlow 与 SharedFlow(上)
44 0
|
8月前
|
安全 Java 程序员
重温经典《Thinking in java》第四版之第五章 初始化与清理(三十)
重温经典《Thinking in java》第四版之第五章 初始化与清理(三十)
34 0
|
设计模式 JavaScript 前端开发
✨从响应式讲起,Observable:穿个马甲你就不认识啦?(附实战)
✨从响应式讲起,Observable:穿个马甲你就不认识啦?(附实战)
|
Java Android开发
面试官:RxJava是如何做到响应式编程的?
RxJava已经出现很多个年头了,但是依然被很多公司使用,如果现在还对RxJava了解的不够透彻, 可以看这个系列对它的分析:相信看完后你对它会有个更全面的认识。 这个系列主要从下面几个方面来讲解: **RxJava基本操作符使用** **RxJava响应式编程是如何实现的** **RxJava的背压机制及Flowable是如何实现背压的** **RxJava的线程切换原理
|
安全 Java Android开发
MVP+Retrofit+RxJava简单事例
MVP+Retrofit+RxJava简单事例
131 0
MVP+Retrofit+RxJava简单事例
|
调度 开发工具 Android开发
一个RxJava实用工具类的集合 - CSDN博客
一个RxJava实用工具类的集合 - CSDN博客
235 0
一个RxJava实用工具类的集合 - CSDN博客
|
Java API 调度
枯燥的Kotlin协程三部曲(中)——应用实战篇(下)
上节《枯燥的Kotlin协程三部曲(上)——概念启蒙篇》,追根溯源,先了解并发相关的概念,尔后引出Kotlin协程
276 0