RXjava2.0学习笔记

第一次写文章,还是要介绍一下为什么那么做?因为学的东西多了,乱七八糟的觉得写的很很好的文章保存在电脑上真的找不见啊!!!

通过http://blog.csdn.net/github_36617621/article/details/77113175 这个链接进行学习(以下的总结根据此链接,若不妥请联系我删除)

1.添加Gradle 配置

 
    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

2、小例子1(完整代码)

package com.edu.bunz.test;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {

    private String TAG = "RxActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        建立连接
        observable.subscribe(observer);

    }


    Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onComplete();


        }
    });

//    创建一个下游 Observer
    Observer<Integer> observer = new Observer<Integer>() {
        @Override
        public void onSubscribe(Disposable d) {
            Log.d(TAG, "subscribe");
        }

        @Override
        public void onNext(Integer value) {
            Log.d(TAG, "" + value);
        }

        @Override
        public void onError(Throwable e) {
            Log.d(TAG, "error");
        }

        @Override
        public void onComplete() {
            Log.d(TAG, "complete");
        }
    };


}

3、小例子1的运行结果


简单笔记:

    1、observable(被观察者)可以发送出无数过onNext,observer(观察者)也可以接收无数onNext

    2、observable发完complete后,会继续发送complete之后的事件,然而observer只要接受到complete事件,就不会再接收obsevable发来的事件了。(其实我觉得上面不是很能说明这句话,所以我要在observable发送时间源的complete之后就一个onNext

此处不在展示全部代码,只展现关键代码(蓝色为添加部分)

        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
            emitter.onComplete();
            emitter.onNext(921);
        }
执行结果如下(蓝色是在

3、onError符合跟onComplete是一样的,替换2中的complete就好了。(同样来验证一下)

   Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
//            emitter.onComplete();
            emitter.onError(new Exception(("the day ... ")));
            emitter.onNext(921);

        }
    });

观察者的onError 修改如下

@Override
public void onError(Throwable e) {
    Log.d(TAG, "error" + e);
}

执行结果


观察现象:observable(被观察者)发onError以后,observer(观察者)接收到以后就不再接收observable之后发来的onNext(921)


4、observable可以不发送oncomplete或者onError(验证如下)

 public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
//            emitter.onComplete();
//            emitter.onError(new Exception(("the day ... ")));
            emitter.onNext(921);

        }
执行结果如下:


5、onComplete和pnError必须唯一并且互斥!按我的理解是只能选择两者中的一个发一次。

注意:倘若违背,比如onComplete再发onError或者多发onError程序都会崩溃,连发onComplete或者onError再发onComplete程序正常运行。(所以对于5这个结论,我只能说不多写,是避免崩溃的最好办法)

(下面进行验证)

        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
            emitter.onComplete();
            emitter.onError(new Exception(("the day ... ")));
            emitter.onNext(921);

        }

运行结果:程序崩溃


  

    
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
            emitter.onComplete();
            emitter.onComplete();
//            emitter.onError(new Exception(("the day ... ")));
            emitter.onNext(921);

        }

执行结果:正常运行

        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
//            emitter.onComplete();
//            emitter.onComplete();
            emitter.onError(new Exception(("the day ... ")));
            emitter.onError(new Exception(("the day ... ")));
            emitter.onNext(921);
        }
执行结果:程序奔溃




        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            emitter.onNext(1);
            emitter.onNext(2);
            emitter.onNext(3);
            emitter.onNext(321);
//            emitter.onComplete();
//            emitter.onError(new Exception(("the day ... ")));
            emitter.onError(new Exception(("the day ... ")));
            emitter.onComplete();
            emitter.onNext(921);
        }

执行结果:程序正常


3、例子2

完整实例代码

package com.edu.bunz.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {

    private String TAG = "RxActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
                Log.d(TAG, "emit 1");
                emitter.onNext(1);
                Log.d(TAG, "emit 2");
                emitter.onNext(2);
                Log.d(TAG, "emit 3");
                emitter.onNext(3);
                Log.d(TAG, "emit complete");
                emitter.onComplete();
                Log.d(TAG, "emit 4");
                emitter.onNext(4);
            }
        }).subscribe(new Observer<Integer>() {
            private Disposable mDisposable;
            private int i;

            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "subscribe");
                mDisposable = d;
            }
            @Override
            public void onNext(Integer value) {
                Log.d(TAG, "onNext: " + value);
                i++;
                if (i == 2) {
                    Log.d(TAG, "dispose");
                    mDisposable.dispose();
                    Log.d(TAG, "isDisposed : " + mDisposable.isDisposed());
                }
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "error");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "complete");
            }
        });
    }
}

主要讲解Disposable(adj.用完即可丢弃的)

作用:不接收observable发来的事件,但并不影响observable继续发送事件。

执行结果:


结论:

1.observer(观察者)中的onSubscribe是最先被调用的

2.调用dispose以后observable(被观察者)继续发送事件

3.onservable(被观察者)不应发送了onComplete而停止

之后还会深入讲解Disposble线程调度的问题

subscribe()有多个重载的方法

    public final Disposable subscribe() {}  //observer不关心任何事件,随observable发
    public final Disposable subscribe(Consumer<? super T> onNext) {} //只关心onNext事件,例子如下
    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {} 
    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
    public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
    public final void subscribe(Observer<? super T> observer) {} (之前使用过)
Observable.create(new ObservableOnSubscribe<Integer>() {
        @Override
        public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
            Log.d(TAG, "emit 1");
            emitter.onNext(1);
            Log.d(TAG, "emit 2");
            emitter.onNext(2);
            Log.d(TAG, "emit 3");
            emitter.onNext(3);
            Log.d(TAG, "emit complete");
            emitter.onComplete();
            Log.d(TAG, "emit 4");
            emitter.onNext(4);
        }
    }).subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            Log.d(TAG, "onNext: " + integer);
        }
    });
总结看学习這原文的原链接!


    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值